如何在python中添加两个OrderedDict对象的值,并保持顺序?

1 python dictionary ordereddictionary

我想添加两个这样的OrderedDict对象:

dict1 = OrderedDict([('Table', [10, 20, 30, 'wood']), ('Chair', [200, 300, 400, 'wood'])])
dict2 = OrderedDict([('Table', ['red', 55]), ('Chair', ['blue', 200])])
Run Code Online (Sandbox Code Playgroud)

然后创建一个新的 OrderedDict(顺序很重要):

dict3 = OrderedDict([('Table', [10, 20, 30, 'wood', 'red', 55]), ('Chair', [200, 300, 400, 'wood', 'blue', 200])])
Run Code Online (Sandbox Code Playgroud)

如果另一个中有任何键dict1dict2其他中不存在,则应将其忽略,仅将匹配的键用于输出。所有值都是列表。

Mar*_*ers 5

因为您想保留OrderedDict对象的顺序,所以需要循环一个并针对另一个测试每个键以产生两个键集的并集:

dict3 = OrderedDict((k, dict1[k] + dict2[k]) for k in dict1 if k in dict2)
Run Code Online (Sandbox Code Playgroud)

循环dict1确保我们以相同的顺序输出新字典的键,通过测试可以k in dict2确保我们仅使用两个输入映射中都存在的键。

您还可以dict1使用进行就地更新list.extend()

for key, value in dict1.items():
    if key in dict2:
        value.extend(dict2[key])
Run Code Online (Sandbox Code Playgroud)

演示:

>>> 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])])
Run Code Online (Sandbox Code Playgroud)