我遇到了setdefault的问题,工会没有像我期望的那样工作。我的代码如下:
#!/usr/bin/python3.3
kanjidic = {
'恕': {'radical':{'multi_radical': {'口心女'}}},
'靛': {'radical':{'multi_radical': {'亠宀月疋二青土'}}},
}
k_rad = {}
for k,v in kanjidic.items():
if 'radical' in v and 'multi_radical' in v['radical']:
print (k, set(v['radical']['multi_radical']))
k_rad[k] = k_rad.setdefault(k, set()).update(
set(v['radical']['multi_radical']))
print('>>', k_rad[k])
打印输出如下:
恕 {'口心女'} >> None 靛 {'亠宀月疋二青土'} >> None
如果我用以下两行代替k_rad:
k_rad[k] = k_rad.setdefault(k, set())
k_rad[k].update(set(v['radical']['multi_radical']))
我的输出如下:
靛 {'亠宀月疋二青土'} >> {'亠宀月疋二青土'} 恕 {'口心女'} >> {'口心女'}
如果我理解setdefault,(显然我没有)输出应该是相同的,对吧?
我错过了什么?为什么dict.setupdate(key,set()).update(set(...))
返回无?
如下所述,问题是更新返回None。我真的不明白
update和setdefault如何协同工作。由于setdefault将dict设置为默认值
我们正在创建一个新的dict元素并返回哈希并更新更新元素
我不需要任务。我真正需要的只是:
for k,v in kanjidic.items():
if 'radical' in v and 'multi_radical' in v['radical']:
k_rad.setdefault(k, set()).update(v['radical']['multi_radical'])
感谢您的帮助!
答案 0 :(得分:0)
dict.setdefault
会在您的案例中返回一个集合。 set.update
是就地操作,这意味着它会更改原始设置并返回无。因此,如果您将结果分配给变量,则只需为其指定无。