我有一个defaultdict(列表)和其他普通词典
A = {1:["blah", "nire"], 2:["fooblah"], 3:["blahblah"]}
B = {1: "something" ,2:"somethingsomething"}
现在可以说我有类似的东西
missing_value = "fill_this"
现在,首先我想找到A中缺少B的键(如缺少3个)
然后将这些键设置为值missing_value
?
什么是pythonic方法呢?
感谢
答案 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)