继Comparing/combining two dictionaries后,我试图找出如何合并两个嵌套的OrderedDicts。
我的数据类似于此类,简化形式:
personA = OrderedDict([
(u'score',
OrderedDict([(u'2015-09-09 03:40:33 +0100', 2646),
(u'2015-09-10 03:35:34 +0100', 2646),
])
),
(u'adjusted_score',
OrderedDict([(u'2015-09-09 03:40:33 +0100', 3646),
(u'2015-09-10 03:35:34 +0100', 3646),
])
)
]
)
personB = OrderedDict([
(u'score',
OrderedDict([(u'2015-09-11 03:40:33 +0100', 4646),
(u'2015-09-12 03:35:34 +0100', 4646),
])
),
(u'adjusted_score',
OrderedDict([(u'2015-09-11 03:40:33 +0100', 5646),
(u'2015-09-12 03:35:34 +0100', 5646),
])
)
]
)
我想将'personA'
和'personB'
合并到一个新的output
变量中,并使用personA的键(让我们假设它们实际上是同一个人)。
到目前为止,我已尝试过此代码,但所有值都会在列表中结束。我不介意是否覆盖任何数据,但输出必须包含相同的数据结构:
output = collections.OrderedDict()
for k,e in personA.items()+personB.items():
output.setdefault(k,[]).append(e)
答案 0 :(得分:0)
如果我完全理解你的问题,你想要的是:
new_dict = OrderedDict([
('score',
OrderedDict([(k, v) for k,v in personA['score'].items()]
+ [(k, v) for k,v in personB['score'].items()])),
('adjusted_score',
OrderedDict([(k, v) for k,v in personA['adjusted_score'].items()]
+ [(k, v) for k,v in personB['adjusted_score'].items()]))
])
你也可以做到同样的结果:
newd = OrderedDict()
for k in personA.keys():
newd[k] = OrderedDict(
[i for i in personA[k].items()] + [j for j in personB[k].items()]
)
并验证结果:
>>> new_dict == newd
>>> True