2013-11-22 41 views
0

我有相同的按键的嵌套字典的两个列表,但不同的值:通过键合并的嵌套字典维护不同的价值

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'}] 
} 

我想要的方式来合并它们保留这些值并仅合并嵌套字典中的键。这样的结果将是这样的:

{ 
    '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 } 

但在结果只有第一库的值呈现明显。你有什么想法来解决这个问题吗?非常感谢你提前。

我不确定从这里取走哪条路。会真的很感激任何建议!非常感谢。

+0

天哪,还在坚持列表中,词典的使用,only-一键每个结构?这使得这项具体任务不必要地变得更加困难。 –

+0

所有的字典都是**分开的对象**,所以你不能枚举他们所有的键并在另一个字典列表中查找键。 –

+0

@MartijnPieters谢谢。不幸的是,这是因为它们来自不同的数据库,我想在不丢失信息的情况下合并它们。我没有选择让他们分开的物体。 :( – user2962024

回答

0

字典只有一个键值对是不是一个好主意,但无论如何,我们可以制定出这样的:

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 
+0

谢谢你的帮助,我收到了错误信息:'k1 = dict(dic1_to_compare [k]]中d的[d.items()[0])) TypeError:'dict_items'对象不支持索引',你认为会造成这种情况吗? – user2962024

+0

什么是你的python版本? – PasteBT

+0

对不起,很长时间才能找到你!是Python 3.2。 – user2962024