2010-02-11 14 views

risposta

236

dict.fromkeys([1, 2, 3, 4])

Questo è in realtà un classmethod, quindi funziona per dict-sottoclassi (come collections.defaultdict) pure. Il secondo argomento opzionale specifica il valore da utilizzare per le chiavi (per impostazione predefinita None.)

+77

Fate attenzione con l'inizializzazione a qualcosa di mutevole: Se si chiama, ad esempio, 'dict.fromkeys ([1, 2, 3], [])', tutti i tasti sono mappati alla stessa lista e la modifica li modificherà tutti. – charleslparker

44
dict.fromkeys(keys, None) 
+0

fantastico, volevo liste vuote, '' dict.fromkeys (keys, []) '' – muon

+4

@muon Questo non è quasi certamente quello che vuoi, vedi [commento di charleslparker] (http://stackoverflow.com/questions/2241891/how-to-inizializzazione-a-dict-con-keys-da-un-list-e-vuoto-value-in-python # comment25131847_2241904). – gerrit

+0

@gerrit che cosa è la strada giusta allora, sai? – muon

6
d = {} 
for i in keys: 
    d[i] = None 
+1

Perché Python lancia un errore del tipo: 'TypeError: 'type' object is not iterable'? – FaCoffee

+1

@FrancescoCastellani Perché 'list' è un tipo. A meno che tu non abbia qualcosa come 'list = []', il metodo sopra ti darà sempre lo stesso errore – smac89

139

nessuno importava per dare una soluzione dict-di comprensione?

>>> keys = [1,2,3,5,6,7] 
>>> {key: None for key in keys} 
{1: None, 2: None, 3: None, 5: None, 6: None, 7: None} 
+1

Questo funziona solo in Python 3.x –

+25

Credo sia stato backportato a 2.7 – wim

+8

Questo è bello e non soffre del questione di riferimento che la risposta accettata fa. – charleslparker

7
>>> keyDict = {"a","b","c","d"} 

>>> dict([(key, []) for key in keyDict]) 

uscita:

{'a': [], 'c': [], 'b': [], 'd': []} 
+1

Sebbene questo codice possa rispondere alla domanda, fornire un contesto aggiuntivo riguardo a _how_ e/o _why_ risolve il problema migliorerebbe il valore a lungo termine della risposta. –

+0

il nome 'keyDict' è fuorviante, poiché la prima riga di codice restituisce un' set', non un 'dict'. –

Problemi correlati