我遇到了 setdefault 问题,并且 union 没有像我期望的那样工作。我的代码如下所示:
#!/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])
打印输出如下所示:
恕{'口心女'} >> 无 靛蓝{'亠宀月疋二青土'} >> 无
如果我用下面的两行代替设置 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(...))
返回无?
如下所述,问题在于更新返回无。我真的不明白 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'])
感谢您的帮助!