2017-08-01 856 views
1

在PHP中我使用array_column()功能很多,因爲它讓我從一個特定列裏的數組返回自己在一個很好的陣列,例如檢索值,使用此陣:的Python相當於PHP的array_column

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

array_column($users, 'name')將返回:

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

由於過渡到Python我還沒有找到一個內置的功能,我可以用做對dictlist A S例如同樣的事情。

這樣的功能是否存在,如果不存在,那麼實現這個功能的最好方法是什麼?

回答

2

您可以使用列表理解來提取感興趣的'列'。據我所知,沒有直接的Python函數。列表理解幾乎總是比使用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')] 

或使用枚舉的索引位置,而不是id領域:

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

或者只是名稱...

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

像這樣?

arr = [ 
     { 
     'id' : 1, 
     'name' : 'Peter' 
     }, 
    { 
     'id' : 2, 
     'name' : 'Paul' 
    }, 
    { 
     'id' : 3, 
     'name' : 'John' 
    } 
] 
list(map(lambda x: x["name"], arr)) 
+0

這肯定做的工作,但我假設這意味着沒有內置的函數,比如'array_column',它可以在幕後做到這一點? –

+0

@PeterFeatherstone不,沒有。一個「列表清單」是你自己的複合數據結構。你必須明確地處理它。另外,雖然人們經常使用列表的字典,但我認爲使用namedtuples列表幾乎總是更好。 –

+0

@ juanpa.arrivillaga公平的觀點和感謝的解釋:-) –