我想添加两个 OrderedDict 对象,如下所示:
dict1 = OrderedDict([('Table', [10, 20, 30, 'wood']), ('Chair', [200, 300, 400, 'wood'])])
dict2 = OrderedDict([('Table', ['red', 55]), ('Chair', ['blue', 200])])
然后像这样创建一个新的 OrderedDict(顺序很重要):
dict3 = OrderedDict([('Table', [10, 20, 30, 'wood', 'red', 55]), ('Chair', [200, 300, 400, 'wood', 'blue', 200])])
如果 dict1 或 dict2 中有任何键在另一个中不存在,则应忽略这些键,仅应将匹配的键用于输出。所有值都是列表。
请您参考如下方法:
因为您想保留 OrderedDict 对象的顺序,所以您需要遍历一个对象并针对另一个键测试每个键以生成两个键集的并集:
dict3 = OrderedDict((k, dict1[k] + dict2[k]) for k in dict1 if k in dict2)
遍历 dict1 确保我们以相同顺序输出新字典的键,用 k in dict2 测试确保我们只使用存在于 两个输入映射。
您还可以使用 list.extend() 就地更新 dict1:
for key, value in dict1.items():
if key in dict2:
value.extend(dict2[key])
演示:
>>> from collections import OrderedDict
>>> dict1 = OrderedDict([('Table', [10, 20, 30, 'wood']), ('Chair', [200, 300, 400, 'wood'])])
>>> dict2 = OrderedDict([('Table', ['red', 55]), ('Chair', ['blue', 200])])
>>> OrderedDict((k, dict1[k] + dict2[k]) for k in dict1 if k in dict2)
OrderedDict([('Table', [10, 20, 30, 'wood', 'red', 55]), ('Chair', [200, 300, 400, 'wood', 'blue', 200])])
