Je vais avoir un problème avec setdefault et les syndicats ne fonctionnent pas comme je les attends à mon code ressemble à:.python setdefault (clé, set())) mise à jour (... retourne Aucun
#!/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])
La sortie d'impression ressemble à:
恕 {'口心女'} >> None 靛 {'亠宀月疋二青土'} >> None
Si je remplace les deux lignes ci-dessous pour le réglage k_rad:
k_rad[k] = k_rad.setdefault(k, set())
k_rad[k].update(set(v['radical']['multi_radical']))
Ma sortie ressemble thi s:
靛 {'亠宀月疋二青土'} >> {'亠宀月疋二青土'} 恕 {'口心女'} >> {'口心女'}
Si je comprends setdefault, (qui, évidemment, je ne suis pas), la sortie doit être le même, non? Qu'est-ce qui me manque? Pourquoi suis dict.setupdate(key,set()).update(set(...))
en retournant None?
Comme indiqué ci-dessous, le problème est que la mise à jour renvoie None. Je n'ai vraiment pas compris comment update et setdefault fonctionnent ensemble. Puisque setdefault met la dict à la valeur par défaut si nous créons un nouvel élément dict et renvoyons le hash et la mise à jour met à jour l'élément Je n'avais pas besoin de l'affectation. Tout ce dont j'avais vraiment besoin était:
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'])
Merci pour l'aide!
Ce n'est pas 'setdefault',' update' met à jour l'ensemble (retourné par 'setdefault') sur place et renvoie None. –
Merci. Et c'est en effet une mise à jour. –