Die meisten pythonischen Wege zum Erstellen eines Wörterbuchs aus einer einzigen Liste

8

Ich habe eine Liste von Tagesnamen (normalerweise von Montag bis Samstag, obwohl spezielle Fälle zutreffen), aus denen ich ein Wörterbuch erstellen möchte. Ich möchte den Wert jedes Tages auf Null initialisieren.

Wenn ich eine Liste von Nullen mit der gleichen Länge der Liste von Tagen hätte, wäre dies ein einfacher Anwendungsfall von zip() . Eine Liste von Nullen ist jedoch eine Verschwendung von Speicherplatz, und wenn das die einzige Lösung wäre, würde ich genauso schnell etwas tun wie:

%Vor%

Gibt es einen pythischeren Weg?

    
user1427661 10.01.2013, 13:25
quelle

2 Antworten

17

Abgesehen von dict.fromkeys können Sie auch dict-comprehension verwenden, aber fromkeys() ist schneller als dict comprehensions:

%Vor%

Für 2.6 und früher:

%Vor%

timeit Vergleiche:

%Vor%

Wie in Kommentaren von @Eumiro und @mgilson erwähnt, ist es wichtig zu beachten, dass fromkeys() und dict-comprehensions verschiedene Objekte zurückgeben können, wenn die verwendeten Werte änderbare Objekte sind:

%Vor%     
Ashwini Chaudhary 10.01.2013, 13:29
quelle
25

Verwenden Sie die .fromkeys() -Klassenmethode :

%Vor%

Er erstellt ein Wörterbuch mit den Elementen des ersten Arguments (einer Sequenz) als Schlüssel und dem zweiten Argument (standardmäßig None ) als Wert für alle Einträge.

Es liegt in der Natur dieser Methode, den Wert für alle Schlüssel wiederzuverwenden; Übergeben Sie keinen änderbaren Wert wie eine Liste oder ein dict, und erwarten Sie, dass für jeden Schlüssel separate Kopien dieses veränderbaren Werts erstellt werden. Verwenden Sie in diesem Fall stattdessen ein Diktatverständnis:

%Vor%     
Martijn Pieters 10.01.2013 13:26
quelle

Tags und Links