• 0

كيف أدمج قاموسين في البايثون ؟

هل هنالك طريقة في البايثون لدمج قاموسين، فمثلا هذا القاموس:

Dict A: {'a':1, 'b':2, 'c':3}
Dict B: {'b':3, 'c':4, 'd':5}

أريده أن يصبح كالتالي:

{'a':1, 'b':5, 'c':7, 'd':5}

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

هنالك عدة طرق للقيام بذلك، فيمكنك على سبيل المثال استخدام collections.Counter كما في المثال التالي:

>>> from collections import Counter
>>> A = Counter({'a':1, 'b':2, 'c':3})
>>> B = Counter({'b':3, 'c':4, 'd':5})
>>> A + B
Counter({'c': 7, 'b': 5, 'd': 5, 'a': 1})

Counter هي صنف فرعي لـ dict، فيمكنك القيام بأي شيء كنت تفعله مع ذلك الصنف الفرعي، مثل التكرار على المفاتيح والقيم.
كما يمكنك استخدام هذا الحل أيضا الذي يعتمد العمليات البسيطة والتكرار، فهذا أحل أفضل وأكثر عمومية والذي يعمل على القيم غير الرقميّة أيضا:

a = {'a': 'foo', 'b':'bar', 'c': 'baz'}
b = {'a': 'spam', 'c':'ham', 'x': 'blah'}

r = dict(a.items() + b.items() +
    [(k, a[k] + b[k]) for k in set(b) & set(a)])

وإذا أردت مثال أبسط فيمكنك في هذه الحالة استخدام هذا المثال، فهو من أفضل النتائج والأكثر قابلية للتفسير:

class MyDict(dict):
    def __add__(self, oth):
        r = self.copy()

        try:
            for key, val in oth.items():
                if key in r:
                    r[key] += val  # You can custom it here
                else:
                    r[key] = val
        except AttributeError:  # In case oth isn't a dict
            return NotImplemented  # The convention when a case isn't handled

        return r

a = MyDict({'a':1, 'b':2, 'c':3})
b = MyDict({'b':3, 'c':4, 'd':5})

print(a+b)  # Output {'a':1, 'b': 5, 'c': 7, 'd': 5}

المصدر

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن