我对setdefault和unions没有像我期望的那样工作有问题。我的代码看起来像:
#!/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])
打印输出如下所示:
^{pr2}$如果我用下面两行来代替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没有返回任何结果。我真的不明白
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'])
谢谢你的帮助!在
^{} 返回案例中的集合。并且^{} 是一个就地操作,这意味着它会更改原始集并返回None。因此,如果你把结果赋给一个变量,你只需给它赋值一个无。在
相关问题 更多 >
编程相关推荐