2016-06-25 13 views
1

Ich habe eine list und ich möchte es in ein Wörterbuch dict konvertieren wo der Schlüssel eines Elements ist die Position des Elements in der Liste:Python: Konvertieren Liste in ein Wörterbuch, wo Schlüssel ist der Index des Elements der Liste

>>> list_ = ['a', 'b', 'c', 'd'] 
>>> # I want the above list to be converted to a dict as shown below 
... 
>>> list_to_dict = {1: 'a',2: 'b', 3: 'c',4: 'd'} 

ich weiß es einfach, aber, und es gibt viele Möglichkeiten, wie man hier an:

>>> {index+1: item for index, item in enumerate(list_)} 
{1: 'a', 2: 'b', 3: 'c', 4: 'd'} 

ich nicht ganz verstehen kann, wie collections.defaultdict Arbeit können wir nutzen, um die genannten Ziele zu erreichen? Oder vielleicht eine andere effizientere Methode?

+2

Was denken Sie, ist ineffizient, um den Code, den Sie haben? Warum denkst du, dass es * effizienter * sein muss? Warum glaubst du, würde ein "Defaultdict" überhaupt helfen? – jonrsharpe

Antwort

6

defaultdict() produziert Standard Werte, Sie generieren Tasten so wird es Ihnen hier nicht helfen.

Verwenden enumerate() ist der beste Weg; Sie können vereinfachen, dass auf:

dict(enumerate(list_, 1)) 

Das zweite Argument für enumerate() die ist Startwert; Wenn Sie ihn auf 1 setzen, entfällt die Notwendigkeit, die Zählung selbst zu erhöhen. dict() kann die (index, value) Paare direkt verbrauchen.

+0

Ja, vielen Dank für die Beseitigung der Redundanz in meinem Code! – wolframalpha

1

Sie können auch defaultdict verwenden.

from collections import defaultdict 
list_ = ['a','b','c','d'] 
s = (zip([i for i in range(1, len(list_) + 1)], list_)) 
list_to_dict = defaultdict(str) 

for k, v in s: 
    list_to_dict[k] = v 

print list_to_dict 

oder darunter wie ..

dict(zip([i for i in range(1, len(list_) + 1)], list_)) 
+2

Sie verwenden zwar nicht das standardmäßige dict-Verhalten, es funktioniert aber genauso, wenn Sie 'list_to_dict = dict()' verwendet haben –

Verwandte Themen