2016-07-28 7 views
2

Ich versuche, dies zu tun:Karte über ein dict

list(map(lambda x: x.name, my_dict)) 

wo my_dict ein dict von Form ist k, v wo v ein Objekt ist und v.name definiert.

Das Problem ist, dass es den Schlüssel k für x verwendet, wo ich wirklich den Wert v verwenden möchte.

Mit anderen Worten: Wie übertrage ich die Werte eines Diktats?

PS Ich möchte my_dict[x] vermeiden, da ich concurrent.futures verwenden werde und nicht das vollständige dict in separate Threads übergeben wird.

+0

Liste drucken (map (Lambda x: x, my_dict.values ​​())) – kezzos

Antwort

3

zu Ansicht der Werte abrufen, können Sie .values Methode verwenden.

map(callable, my_dict.values()) 

Offensichtlich map mit trivialen Callables kann in der Regel durch die Verwendung Liste oder Generator Comprehensions in Python vermieden werden.

[x.name for x in my_dict.values()] # creates list: non-lazy 
(x.name for x in my_dict.values()) # creates generator: lazy 
2

Sie müssen map() nicht verwenden und dann das Ergebnis in eine Liste konvertieren. Stattdessen können Sie einfach eine Liste Verständnis durch Schleifen über die Wörterbuchwerte verwenden verwenden:

[v.name for v in my_dict.values()] 

Oder immer noch, wenn Sie auf der Suche nach einem funktionalen Ansatz können Sie attrgetter Funktion von Bedienmodul verwenden:

from operator import attrgetter 
map(attrgetter('name'), my_dict.values()) 
Verwandte Themen