Mam listę takich nakazów:
[{'value': 'apple', 'blah': 2},
{'value': 'banana', 'blah': 3} ,
{'value': 'cars', 'blah': 4}]
chcę ['apple', 'banana', 'cars']
Jak najlepiej to zrobić?
python
list
dictionary
SuperString
źródło
źródło
Oto inny sposób na zrobienie tego za pomocą funkcji map () i lambda:
gdzie ja jest listą. Uważam, że ten sposób jest „najseksowniejszy”, ale zrobiłbym to za pomocą rozumienia list.
Aktualizacja: w przypadku, gdy brakuje tej „wartości” jako klucza:
Aktualizacja: Nie jestem też wielkim fanem lambd, wolę nazywać rzeczy ... tak bym to zrobił mając to na uwadze:
Poszedłbym nawet dalej i stworzył jedyną funkcję, która wyraźnie określa, co chcę osiągnąć:
W Pythonie 3, ponieważ
map
zwraca iterator, użyj,list
aby zwrócić listę, nplist(map(operator.itemgetter('value'), l))
.źródło
map
, użyjoperator.itemgetter('value')
, a nie plikulambda
.źródło
getkey
… masz na myślid.get('value')
? To byłoby to samo, co rozumienie drugiej listy @ isbadawi, a nie Michała.W bardzo prostym przypadku, takim jak ten, zrozumienie, jak w przypadku odpowiedzi Ismaila Badawiego, jest zdecydowanie właściwą drogą.
Ale kiedy sprawy stają się bardziej skomplikowane i musisz zacząć pisać złożone zdania składające się z wielu zdań lub wyrażenia zagnieżdżone, w których występują złożone wyrażenia, warto przyjrzeć się innym alternatywom. Istnieje kilka różnych (quasi-) standardowych sposobów określania wyszukiwań w stylu XPath w zagnieżdżonych strukturach dyktowania i listy, takich jak JSONPath, DPath i KVC. Są dla nich fajne biblioteki na PyPI.
Oto przykład z biblioteką o nazwie
dpath
, pokazujący, jak może uprościć coś nieco bardziej skomplikowanego:Lub używając
jsonpath-ng
:Ten na pierwszy rzut oka może nie wyglądać tak prosto, ponieważ
find
zwraca dopasowywanie obiektów, które zawierają wszelkiego rodzaju rzeczy oprócz tylko dopasowanej wartości, takie jak ścieżka bezpośrednio do każdego elementu. Ale w przypadku bardziej złożonych wyrażeń możliwość określenia ścieżki, takiej jak'*.[*].value'
zamiast klauzuli ze zrozumieniem dla każdego,*
może mieć duże znaczenie. Ponadto JSONPath to specyfikacja niezależna od języka, a nawet testerzy online mogą być bardzo przydatni do debugowania.źródło
Myślę, że tak proste, jak poniżej, dałoby ci to, czego szukasz.
Możesz to zrobić za pomocą kombinacji
map
i,lambda
ale rozumienie listy wygląda bardziej elegancko i pytonicznie.W przypadku mniejszych list wejściowych dobrze jest zrobić, ale jeśli dane wejściowe są naprawdę duże, myślę, że generatory są idealnym sposobem.
Oto porównanie wszystkich możliwych rozwiązań dla większego wkładu
Jak widać, generatory są lepszym rozwiązaniem w porównaniu do innych, mapa jest również wolniejsza w porównaniu do generatora, dlatego pozostawię OP, aby się dowiedzieć.
źródło
Podążaj za przykładem --
źródło
Pobrać kluczowe wartości z listy słowników w Pythonie?
Dawny:
dla d w danych:
Wynik:
źródło
Bardzo prostym sposobem na to jest:
Wynik:
źródło