#1 Le 18/03/2018, à 20:46
- Hizoka
[Résolu] [python3] Boucle while traitant des infos d'un dico
Bonsoir à vous,
mon cerveau a dû surchauffer car là je suis bloqué par un truc tout con...
Petit exemple :
# liste de dictionnaire contenant des infos sur un album
zic = {"album1" : { "id":"1", "artist": "svinkels", "year": "2000", "genre": "rap" },
"album5" : { "id":"5", "artist": "svinkels", "year": "2000", "genre": "punk" },
"album4" : { "id":"4", "artist": "svinkels", "year": "2001", "genre": "punk" },
"album8" : { "id":"8", "artist": "svinkels", "year": "2001", "genre": "rap" },
"album7" : { "id":"7", "artist": "tryo", "year": "2000", "genre": "reggae" },
"album3" : { "id":"3", "artist": "tryo", "year": "2000", "genre": "reggae" },
"album2" : { "id":"2", "artist": "tryo", "year": "2001", "genre": "variete" },
"album6" : { "id":"6", "artist": "tryo", "year": "2001", "genre": "variete" }}
# Dictionnaire qui a trié les albums par artist
albums = {"svinkels": ["album1", "album4", "album5", "album8"], "tryo": ["album2", "album3", "album6", "album7"]}
albumsBis = {}
sortBy = ["genre", "year"]
# Dictionnaire qui a trié les albums par artist
albums = {"svinkels": ["album1", "album4", "album5", "album8"]", "tryo": ["album2", "album3", "album6", "album7"]}
sortBy = ["genre", "year"]
et moi je voudrais arriver à un dico :
{
Artist:
{
genre:
{
year: [albums]
}
}
}
Soit dans l'exemple :
{
"svinkels":
{
"rap":
{
"2000": ["album1"],
"2001": ["album8"]
},
"punk":
{
"2000": ["album5"],
"2001": ["album4"]
}
}
"tryo":
{
"variete":
{
"2001": ["album7", "Album3"]
},
"reggae":
{
"2000": ["album2", "Album6"]
}
}
}
Je l'ai déjà fait mais là... je suis trop fatigué je crois...
il faut boucler sur la liste sortBy, et avoir une autre boucle infinie qui rajoute un niveau de profondeur à chaque fois...
Enfin voilà... désolé pour cette demande relativement basique...
Merci à vous
Dernière modification par Hizoka (Le 19/03/2018, à 12:21)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#2 Le 19/03/2018, à 12:22
- Hizoka
Re : [Résolu] [python3] Boucle while traitant des infos d'un dico
On m'a proposé 2 belles solutions ici : https://www.developpez.net/forums/d1830 … os-d-dico/
dd = {}
for album, data in zic.items():
artist, *items = [ data[z] for z in [ 'artist' ] + sortBy ]
entry = dd.setdefault(artist, {})
for z in items[:-1]:
entry.setdefault(z, {})
entry = entry[z]
entry.setdefault(items[-1], []).append(album)
print(dd)
et
def add_key_or_create(dico, key_list, val):
### /!\ This function modifies the variable dico
if len(key_list)==1 :
key = key_list[0]
if key not in dico : dico[key]=[]
dico[key].append(val)
else :
key = key_list[0]
if key not in dico : dico[key]={}
add_key_or_create(dico[key], key_list[1:], val)
sortBy2 = [ "artist", "genre", "year"]
dico2 = {}
for artist in albums :
for album in albums[artist] :
keys = [ zic[album][key] for key in sortBy2 ]
add_key_or_create(dico2, keys , album)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne