我遇到了 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])
打印输出如下所示:
恕 {'口心女'}
>> 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 返回 None。 我真的不明白 update 和 setdefault 如何协同工作。 由于 setdefault 将 dict 设置为默认值 if 我们正在创建一个新的 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'])
感谢您的帮助!