2010-02-11 12 views

Odpowiedz

236

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

To jest rzeczywiście classmethod, tak to działa na DICT-podklasy (jak collections.defaultdict), jak również. Opcjonalny drugi argument określa wartość używaną do klawiszy (domyślnie None.)

+77

Uważaj inicjowanie coś zmienny: Jeśli zadzwonisz, np 'dict.fromkeys ([1, 2, 3], [])', wszystkie klucze są zamapowane na tę samą listę, a modyfikacja jednego spowoduje ich modyfikację. – charleslparker

44
dict.fromkeys(keys, None) 
+0

niesamowite, chciałem pustych list, '' dict.fromkeys (keys, []) '' – muon

+4

@muon To prawie na pewno nie jest to, co chcesz, patrz [komentarz charleslparker] (http://stackoverflow.com/questions/2241891/how-to-initialize-a-dict-with-keys-from-a-list-and-empty-value-in-python # comment25131847_2241904). – gerrit

+0

@gerrit, co jest właściwym sposobem, wiesz? – muon

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

Dlaczego Python wyrzuca błąd typu: "TypeError:" typ "object is not iterable"? – FaCoffee

+1

@FrancescoCastellani Ponieważ 'list' jest typem. Jeśli nie masz czegoś takiego jak 'list = []', powyższa metoda zawsze da ci ten sam błąd – smac89

139

nikt nie dbał, aby otrzymać roztwór dict-rozumienia?

>>> 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

Działa to tylko w Pythonie 3.x –

+25

Uważam, że został przeniesiony do wersji 2.7 – wim

+8

To jest miłe i nie cierpi z powodu Problem referencyjny, który przyjmuje zaakceptowana odpowiedź. – charleslparker

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

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

wyjściowa:

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

Podczas gdy ten kod może odpowiedzieć na pytanie, podanie dodatkowego kontekstu dotyczącego _how_ i/lub _why_ go rozwiązuje problem, poprawi długoterminową wartość odpowiedzi. –

+0

Nazwa 'keyDict' jest myląca, ponieważ pierwsza linia kodu zwraca' set', a nie 'dict'. –

Powiązane problemy