ali_agha نشر 7 أكتوبر 2015 أرسل تقرير نشر 7 أكتوبر 2015 هل هنالك طريقة في البايثون لدمج قاموسين، فمثلا هذا القاموس: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 هشام رزق الله نشر 7 أكتوبر 2015 أرسل تقرير نشر 7 أكتوبر 2015 هنالك عدة طرق للقيام بذلك، فيمكنك على سبيل المثال استخدام 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}المصدر اقتباس
السؤال
ali_agha
هل هنالك طريقة في البايثون لدمج قاموسين، فمثلا هذا القاموس:
أريده أن يصبح كالتالي:
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.