2017-08-01 1 views
1

In PHP verwende ich die array_column() Funktion viel wie es mir erlaubt, Werte aus einer bestimmten Spalte abzurufen innerhalb einer Anordnung sich in einem schönen Array zurückgegeben, zum Beispiel, um dieses Array mit:Python Äquivalent von PHP array_column

$users = [ 
    [ 
     'id' => 1, 
     'name' => 'Peter' 
    ], 
    [ 
     'id' => 2, 
     'name' => 'Paul' 
    ], 
    [ 
     'id' => 3, 
     'name' => 'John' 
    ] 
]; 

Doing array_column($users, 'name') zurückkehren:

Array 
(
    [0] => Peter 
    [1] => Paul 
    [2] => John 
) 

Da Python Übergang ich habe noch nicht über eine eingebaute Funktion gefunden, dass ich die gleiche Sache zu tun auf einem list von dict s zum Beispiel verwenden kann.

Gibt es eine solche Funktion und wenn nicht, was ist der beste Weg, dies zu erreichen?

Antwort

2

Sie können ein Listenverständnis verwenden, um die interessierende Spalte zu extrahieren. Es gibt meines Wissens keine direkte Python-Funktion. Listenübersichten sind fast immer schneller als map. Python List Comprehension Vs. Map

users = [ 
    { 
     'id': 1, 
     'name': 'Peter' 
    }, 
    { 
     'id': 2, 
     'name': 'Paul' 
    }, 
    { 
     'id': 3, 
     'name': 'John' 
    } 
] 

>>> [(user.get('id'), user.get('name')) for user in users] 
[(1, 'Peter'), (2, 'Paul'), (3, 'John')] 

oder eine Aufzählungsindexposition anstelle des id Feldes mit:

>>> [(n, user.get('name')) for n, user in enumerate(users)] 
[(0, 'Peter'), (1, 'Paul'), (2, 'John')] 

Oder einfach nur die Namen ...

>>> [user.get('name') for user in users] 
['Peter', 'Paul', 'John'] 
1

So ähnlich?

+0

dass auf jeden Fall die Arbeit erledigt, aber ich gehe davon aus Das bedeutet, dass es keine integrierte Funktion wie 'array_column' gibt, die dies alles hinter den Kulissen tut? –

+0

@PeterFeatherstone nein, gibt es nicht. Eine "Liste von Diktaten" ist Ihre eigene, zusammengesetzte Datenstruktur. Sie müssen sich explizit damit befassen. Auch wenn Menschen dazu neigen, häufig eine Liste von Diktaten zu verwenden, denke ich, dass es fast immer besser ist, eine Liste von NamedTuples zu verwenden. –

+0

@ juanpa.arrivillaga Fairer Punkt und danke für die Erklärung :-) –