更新字典而不会丢失数据

时间:2014-09-15 16:38:23

标签: python python-3.x dictionary python-3.4

如果我有两个看起来像这样的词典:

a = {"fruit":["orange", "lemon"], "vegetable":["carrot", "tomato"]}
b = {"fruit":["banana", "lime"]}

有没有办法可以更新词典' a'这样我就不会覆盖以前的数据,而只是追加它以便我的结果看起来像这样?

a = {"fruit":["orange", "lemon", "banana", "lime"], "vegetable": ["carrot", "tomato"]}

我知道有类似的东西,但不幸的是它重写了价值,这不是我想做的事情:

a.update(b)
#returns a dictionary like the following {"fruit":["banana", "lime"], "vegetable":["carrot","tomato"]}, again, not what I want. 

2 个答案:

答案 0 :(得分:4)

没有循环没办法:

for k, v in b.items():
    a[k].extend(v)

这假设a[k]实际存在。 。 。如果您想在缺少它的情况下添加它:

for k, v in b.items():
    try:
        a[k].extend(v)
    except KeyError:
        a[k] = v

答案 1 :(得分:1)

您可以使用defaultdict,但必须迭代这些项目。

from collections import defaultdict
a = defaultdict(list)

你也可以定义一个帮助方法(但要注意不要用普通的dict调用它,某种类型的检查可能是合适的):

def update(a,b):
    for k, v in b.items():
        a[k].extend(v)

另一个选项是扩展dict并覆盖update方法来执行此操作。