python setdefault(key,set())).update(... 返回 None

问题描述 投票:0回答:1

我遇到了 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'])

感谢您的帮助!

python set setdefault
1个回答
1
投票

dict.setdefault
在您的情况下返回一组。而
set.update
是一个就地操作,这意味着它改变了原始集合并返回None。因此,如果将结果分配给变量,只需将其分配为None

© www.soinside.com 2019 - 2024. All rights reserved.