我有像我期望他們能夠與setdefault和不工作的工會問題我的代碼如下所示:蟒蛇setdefault(鍵,設置()))更新(...返回無
#!/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']))
我的輸出看起來像THI S:
靛 {'亠宀月疋二青土'} >> {'亠宀月疋二青土'} 恕 {'口心女'} >> {'口心女'}
如果我理解setdefault,(這顯然我不)輸出應該是一樣的吧? 我錯過了什麼?爲什麼dict.setupdate(key,set()).update(set(...))
返回無?
如下所示,問題是更新返回None。我真的不明白 如何更新和setdefault一起工作。由於setdefault將字典設置爲默認值,如果 我們正在創建一個新的字典元素,並返回散列並更新更新元素 我不需要分配。我真正需要的是:
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'])
感謝您的協助!
它不是'setdefault','update'更新set(由'setdefault'返回)in-place並返回None。 –
謝謝。這確實是一個更新。 –