python setdefault(key,set())。更新(。。。返回非

2024-05-23 16:36:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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'])

谢谢你的帮助!在


Tags: andinforifupdateitemsmultidict