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

时间:2016-11-10 18:39:26

标签: python dictionary ordereddictionary

我想添加两个这样的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])])

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

2 个答案:

答案 0 :(得分:4)

因为你想保留OrderedDict个对象的顺序,你需要循环遍历一个并测试每个密钥,以产生两个密钥集的并集:

dict3 = OrderedDict((k, dict1[k] + dict2[k]) for k in dict1 if k in dict2)

循环dict1确保我们以相同的顺序输出新字典的密钥,使用k in dict2进行测试可确保我们只使用两个输入映射中的密钥

您还可以使用dict1

就地更新list.extend()
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])])

答案 1 :(得分:0)

dict3 = {}
for i in dict1:
    if i in dict2:
        dict3[i]=[]
        for j in dict1[i]:
            dict3[i].append(j)
        for j in dict2[i]:
            dict3[i].append(j)