#1 Le 08/11/2017, à 11:23
- Hizoka
[python3] Dictionnaires imbriqués
Bonjour à vous,
je rencontre un questionnement, je vais donc vous présenter ma situation actuelle avec une simplification poussée :
SuperDico = {}
def test(Key, Value):
SuperDico[Key] = Value
test("oui", 1)
Ça fonctionne bien
Mais maintenant si je souhaite modifier un dictionnaire imbriqué, comment pourrais je faire via ma fonction ?
Car évidemment, cela ne fonctionne pas :
SuperDico = {}
SuperDico["patapof"] = {}
def test(Key, Value):
SuperDico[Key] = Value
test("patapof/oui", 1)
Alors il est évident que ma fonction fait bien plus de choses que dans l'exemple
Une idée ?
Merci à vous !
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#2 Le 08/11/2017, à 11:41
- pingouinux
Re : [python3] Dictionnaires imbriqués
Bonjour,
Je ne suis pas certain d'avoir bien compris ce que tu voulais faire.
Peut-être ceci ?
SuperDico = {}
SuperDico["patapof"] = {}
def test(Key, Index, Value):
SuperDico[Key][Index] = Value
test("patapof","oui", 1)
print(SuperDico)
qui donne ce résultat
{'patapof': {'oui': 1}}
Hors ligne
#3 Le 08/11/2017, à 11:59
- Hizoka
Re : [python3] Dictionnaires imbriqués
Oui mais ça c'est bien trop facile
Je cherche un moyen pour qu'il s'adapte automatiquement
Je ne sais pas si ça sera dans un dictionnaire imbriqué ni même le nombre d'imbrication...
Ca serait une sacrée simplification de mon code, s'il est capable de détérminer tout seul la profondeur.
et en écrivant, je me dis que si je fais un truc du genre :
la fonction teste split la Key via des / (Key1/Key2/Key3)...
En fonction du nombre de valeur il peut comprendre l'imbrication...
Ca te parait bien ça ?
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#4 Le 08/11/2017, à 12:31
- pingouinux
Re : [python3] Dictionnaires imbriqués
Ceci ?
SuperDico = {}
def test(Key, Value):
keys=Key.split('/')
Dico=SuperDico
for key in keys[:-1]:
if key not in Dico: Dico[key]={}
Dico=Dico[key]
Dico[keys[-1]]=Value
test("patapof/ptet_ben_qu_oui/oui", 1)
test("patapof/ptet_ben_qu_oui/non", 2)
test("patapif/ptet_ben_qu_non", 3)
print(SuperDico)
dont voici le résultat :
{'patapif': {'ptet_ben_qu_non': 3}, 'patapof': {'ptet_ben_qu_oui': {'oui': 1, 'non': 2}}}
Hors ligne
#5 Le 08/11/2017, à 12:37
- Hizoka
Re : [python3] Dictionnaires imbriqués
Ca semble pas mal, mieux que ce que j'ai fait
je fais des tests et je reviens.
merci.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne