簡體   English   中英

通過保留不同值的鍵合並嵌套字典

[英]Merging nested dictionaries by keys preserving different values

我有兩個嵌套字典的列表,它們具有相同的鍵,但值不同:

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 }

但是很明顯,結果只顯示了第一個字典的值。 您對如何解決此問題有任何想法嗎? 提前非常感謝您。

我不確定從這里采取哪種方式。 真的很感謝任何建議! 非常感謝。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM