/ / Come convertire un dizionario di tuple in un dizionario di liste (Python)? - python, elenco, dizionario, tuple

Come convertire un dizionario di tuple in un dizionario di liste (Python)? - python, elenco, dizionario, tuple

Sono nuovo di Python (e della programmazione in generale), ma ho un dizionario con le chiavi come tuple e voglio creare un nuovo dizionario con le stesse chiavi degli elenchi.

ecco cosa intendo:

Io ho:

d = {("apple", "banana", "pear", "pineapple"):24,
("banana", "pineapple", "apple", "pear"):17,
("pineapple", "pear", "banana", "apple"):10,
("apple", "pineapple", "banana", "pear"):16}

Voglio:

new_d = {["apple", "banana", "pear", "pineapple"]:24,
["banana", "pineapple", "apple", "pear"]:17,
["pineapple", "pear", "banana", "apple"]:10,
["apple", "pineapple", "banana", "pear"]:16}

c'è un modo semplice per farlo usando i loop e se le istruzioni?

risposte:

7 per risposta № 1

le liste non sono lavabili e quindi non possono essere chiavi in ​​un dizionario.

Perché vuoi che le tue chiavi siano liste? Se stai attualmente chiamando una funzione

expect_iterable_of_lists(d.keys())

, puoi semplicemente combinare map e list:

expect_iterable_of_lists(map(list, d.keys()))

2 per risposta № 2

Come notato da altri, probabilmente non è una buona idea usare le liste come chiavi del dizionario.

Se questo è quello che ti serve davvero, non è difficile aggiungere hashability alle liste:

>>> class List(list):
def __hash__(self):
return hash(tuple(self))

>>> d = {("apple", "banana", "pear", "pineapple"):24,
("banana", "pineapple", "apple", "pear"):17,
("pineapple", "pear", "banana", "apple"):10,
("apple", "pineapple", "banana", "pear"):16}

>>> new_d = {List(k):v for k, v in d.items()}
>>> new_d
{["banana", "pineapple", "apple", "pear"]: 17,
["apple", "banana", "pear", "pineapple"]: 24,
["pineapple", "pear", "banana", "apple"]: 10,
["apple", "pineapple", "banana", "pear"]: 16}

Questo codice raggiungerà il tuo obiettivo di utilizzare un elencouna chiave e funzionerà bene finché non si modifica la lista (i dts basati sulle tabelle hash non funzionano bene con i tasti mutabili). Se hai bisogno di mutare le chiavi, avrai bisogno di un'implementazione di dizionario alternativa che non si baserà sull'hashing (a lista di associazioni per esempio).