اذهب إلى المحتوى

السؤال

Recommended Posts

  • 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}

المصدر

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...