2015-10-12 9 views
21

folgendes Wörterbuch Gegeben:Mapping Wörterbuch Wert zur Liste

dct = {'a':3, 'b':3,'c':5,'d':3} 

Wie kann ich diese Werte in eine Liste wie anwenden:

lst = ['c', 'd', 'a', 'b', 'd'] 

zu erhalten, um so etwas wie:

lstval = [5, 3, 3, 3, 3] 
+6

Was passiert, wenn der Wert in der Liste nicht im Wörterbuch vorhanden ist? –

+1

Also willst du * diese * Tasten in eine Liste bekommen (benutze 'list (dict.keys())'), oder hast du schon eine solche Liste? Und übrigens, benutze 'dict' nicht als Variablennamen. –

+1

Mögliches Duplikat von [Python-Wörterbuch: Liste der Werte für Schlüsselliste abrufen] (http://stackoverflow.com/questions/18453566/python-dictionary-get-list-of-values-for-list-of-keys) –

Antwort

25

Mit map:

>>> map(dct.get, lst) 
[5, 3, 3, 3, 3] 

Mit einem list comprehension:

>>> [dct[k] for k in lst] 
[5, 3, 3, 3, 3] 
+2

Dies scheint der beste zu sein, der map verwendet, du brauchst dafür kein Lambda. –

+3

'map' wird unordentlich, wenn ein Nicht-None-Standard erforderlich ist ... –

+12

Es ist erwähnenswert, dass Sie in Python 3.x' list (map (dct.get, lst)) 'eingeben müssen, um die tatsächlichen Ergebnisse zu erhalten zurück, sonst erhalten Sie ein Iterator-Objekt. – Leb

8

Sie können Schlüssel aus Ihrer Liste mit map Funktion:

iterieren
lstval = list(map(dct.get, lst)) 

Oder wenn Sie Liste Verständnis bevorzugen:

lstval = [dct[key] for key in lst] 
13

Sie können eine Liste Verständnis für diesen Einsatz:

lstval = [ dct.get(k, your_fav_default) for k in lst ] 

Ich schlage vor, persönlich Listenkomprehensionen mit über eingebaute in map weil es so aussieht allen Python-Programmierern vertraut, ist es leichter zu analysieren und zu erweitern, falls ein benutzerdefinierter Standardwert benötigt wird.

+0

[Warum verwenden Sie List-Comp über 'map'?] (https://docs.python.org/3.0/whatsnew/3.0.html#views-and-iterators-instead-oflists) * Besonders schwierig ist map() für die Nebenwirkungen der Funktion aufgerufen; Die korrekte Umwandlung ist die Verwendung einer regulären for-Schleife (da das Erstellen einer Liste nur verschwenderisch wäre). * :) –

+0

@Oleg: Deshalb habe ich 'dct.get (k, your_fav_default)' an der richtigen Stelle. Wenn Werte fehlen, sollte es den 'your_fav_default' zurückgeben. –

3

Sie keine dict als Variablennamen verwenden, wie es in.

>>> d = {'a':3, 'b':3,'c':5,'d':3} 
>>> lst = ['c', 'd', 'a', 'b', 'd'] 
>>> map(lambda x:d.get(x, None), lst) 
[5, 3, 3, 3, 3] 
6
lstval = [d[x] for x in lst] 

Ihr Wörterbuch Namen nicht dict gebaut wurde. dict ist der Name des Typs.

2

ich eine Liste Verständnis verwenden würde:

listval = [dict.get(key, 0) for key in lst] 

Der .get(key, 0) Teil wird verwendet, um einen Standardwert zurück (In diesem Fall 0) wenn inkein Element mit diesem Schlüssel existiert.

+0

@Oleg Der Code iteriert über Elemente von 'lst' nicht Schlüsseln im Wörterbuch. Es könnte also etwas in "lst" und keinen entsprechenden Schlüssel im Diktat geben (selbst wenn das nicht viel Sinn machen würde) und wir müssen diesen Fall behandeln. – TobiMarg

0

In Dokumentation von Python 3:

zu entpacken, zip(*d.items()) Ihr Ergebnis.

d = {'a': 1, 'b': 2, 'c': 3, 'd': 4} 

print(d.items())  # [('a', 1), ('c', 3), ('b', 2), ('d', 4)] in Python 2 
         # dict_items([('a', 1), ('c', 3), ('b', 2), ('d', 4)]) in Python 3 

print(zip(*d.items())) # [('a', 1), ('c', 3), ('b', 2), ('d', 4)] in Python 2 
         # <zip object at 0x7f1f8713ed40> in Python 3 

k, v = zip(*d.items()) 
print(k)    # ('a', 'c', 'b', 'd') 
print(v)    # (1, 3, 2, 4) 
Verwandte Themen