使用默认值python设置字典的缺失值

时间:2012-03-21 19:23:40

标签: python

我有一个defaultdict(列表)和其他普通词典

A = {1:["blah", "nire"], 2:["fooblah"], 3:["blahblah"]}
B = {1: "something" ,2:"somethingsomething"}

现在可以说我有类似的东西

missing_value = "fill_this"

现在,首先我想找到A中缺少B的键(如缺少3个) 然后将这些键设置为值missing_value? 什么是pythonic方法呢? 感谢

4 个答案:

答案 0 :(得分:10)

您可以使用setdefault

for k in A:
    B.setdefault(k, "fill_this")

这与更长的时间基本相同:

for k in A:
    if k not in B:
        B[k] = "fill_this"

但是,由于setdefault只需要查询每个k一次,setdefault比此“测试和设置”解决方案更快。

或者(可能更慢),确定设定差异并设置(没有双关语)这些值:

for k in set(A).difference(B):
    B[k] = "fill_this"

答案 1 :(得分:1)

解决方案是通过A并在必要时更新B。它会有O(len(A))复杂度:

for key in A:
    if key not in B:
        B[key] = missing_value

答案 2 :(得分:1)

这是一种方式:

def test():
    A = {1:"blah", 2:"fooblah", 3:"blahblah"}
    B = {1: "something" ,2:"somethingsomething"}
    keys=set(A.keys()).difference(set(B.keys()))
    for k in keys:
        B[k]="missing"
    print (B)

答案 3 :(得分:-1)

当我看到需要这个时,有一套标准的密钥需要在dicts的dict中检查。如果是这种情况,并且性能不是一个重要因素,我认为这是最干净的语法。

template = {k: default for k in domain}
for k, d in dicts.items():
    dicts[k] = template.copy().update(d)