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 № 1le 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).