Python 通过保留不同值的键合并嵌套字典

Python 通过保留不同值的键合并嵌套字典,python,python-3.x,dictionary,merge,Python,Python 3.x,Dictionary,Merge,我有两个嵌套字典列表,它们的键相同,但值不同: d1 = { 'distilled ': [{'water': '45'}, {'vodka': '9'}, {'vinegar': '7'}, {'beer': '6'}, {'alcohol': '5'}, {'whiskey': '5'}], 'planted': [{'tree': '30'}, {'seed': '28'}, {'flower': '20'}, {'plant': '7'}, {'bomb': '4'},

我有两个嵌套字典列表,它们的键相同,但值不同:

d1 = {
    'distilled ': [{'water': '45'}, {'vodka': '9'}, {'vinegar': '7'}, {'beer': '6'}, {'alcohol': '5'}, {'whiskey': '5'}],
    'planted': [{'tree': '30'}, {'seed': '28'}, {'flower': '20'}, {'plant': '7'}, {'bomb': '4'}, {'garden': '2'}]
}

我希望以一种保留值并只合并嵌套字典中的键的方式合并它们。因此,结果将如下所示:

{
    'distilled ': [('water', '45', '14'), ('vodka', '9'), ('vinegar', '7', '9'), ('beer', '6', '5'), ('alcohol',  '5'), ('whiskey', '5'), ('wine', '8')], 
    'planted': [('tree', '30', '18'), ('seed', '28', '9'), ('flower', '20', '7'), ('plant', '7'), ('bomb', '4'), ('garden', '2', '3')]
}
我尝试使用以下方法将两者合并:

d_merged = { k: [ d1[k], d2_to_compare[k] ] for k in d1 }
但结果中显然只给出了第一本词典的值。你对如何解决这个问题有什么想法吗?事先非常感谢


我不知道从这里走哪条路。如果您有任何建议,我将不胜感激!非常感谢。

dict只有一个键值对不是一个好主意,但无论如何,我们可以这样计算:

d1 = {
    'distilled': [{'water': '45'}, {'vodka': '9'}, {'vinegar': '7'}, {'beer': '6'},        {'alcohol': '5'}, {'whiskey': '5'}],
    'planted': [{'tree': '30'}, {'seed': '28'}, {'flower': '20'}, {'plant': '7'}, {'bomb': '4'}, {'garden': '2'}]
}

d2 = {
    'distilled': [{'water': '14'}, {'vinegar': '9'}, {'wine': '8'}, {'alcohol': '8'},   {'liquid': '7'}, {'whiskey': '6'}, {'beer': '5'}],
    'planted': [{'flower': '28'}, {'tree': '18'}, {'seed': '9'}, {'vegetable': '4'}, {'bush': '3'}, {'grass': '3'}, {'garden': '3'}]
}

d3 = {}

for k, v in d1.items():
    k1 = dict([d.items()[0] for d in d1[k]])
    k2 = dict([d.items()[0] for d in d2[k]])
    ret = []
    for d in (set(k1.keys()) | set(k2.keys())):
        ret.append((d, k1.get(d), k2.get(d)))
    d3[k] = ret

print d3

天哪,仍然坚持每个结构只有一个键的词典列表?这使得这个特定的任务变得不必要的困难。您的所有词典都是独立的对象,因此您不能只列举它们的所有键,然后在其他词典列表中查找这些键。@MartijnPieters谢谢。不幸的是,情况就是这样,因为它们来自不同的数据库,我想以某种方式合并它们而不丢失信息。我没有选择使它们成为单独的对象(感谢您的帮助。我收到了错误消息:
k1=dict([d.items()[0]代表dic1中的d\u to\u compare[k]])TypeError:“dict\u items”对象不支持索引
,您认为是什么原因造成的?您的python版本是什么?很抱歉花了很长时间才找到您!是python 3.2。
d1 = {
    'distilled': [{'water': '45'}, {'vodka': '9'}, {'vinegar': '7'}, {'beer': '6'},        {'alcohol': '5'}, {'whiskey': '5'}],
    'planted': [{'tree': '30'}, {'seed': '28'}, {'flower': '20'}, {'plant': '7'}, {'bomb': '4'}, {'garden': '2'}]
}

d2 = {
    'distilled': [{'water': '14'}, {'vinegar': '9'}, {'wine': '8'}, {'alcohol': '8'},   {'liquid': '7'}, {'whiskey': '6'}, {'beer': '5'}],
    'planted': [{'flower': '28'}, {'tree': '18'}, {'seed': '9'}, {'vegetable': '4'}, {'bush': '3'}, {'grass': '3'}, {'garden': '3'}]
}

d3 = {}

for k, v in d1.items():
    k1 = dict([d.items()[0] for d in d1[k]])
    k2 = dict([d.items()[0] for d in d2[k]])
    ret = []
    for d in (set(k1.keys()) | set(k2.keys())):
        ret.append((d, k1.get(d), k2.get(d)))
    d3[k] = ret

print d3