2014-09-04 60 views
0

假設我們有類型的字典列表:熱鍵列表中的字典項目的值由某個鍵值?

[ 
    { 
    'k1': 'v11', 
    'k2': 'v21', 
    'k3': 'v31' 
    }, 
    { 
    'k1': 'v12', 
    'k2': 'v22', 
    'k3': 'v32' 
    }, 
    { 
    'k1': 'v13', 
    'k2': 'v23', 
    'k3': 'v33' 
    } 
] 

我想獲得的所有值,其關鍵是​​:[v11, v12, v13],但使用沒有循環

我已經嘗試使用map功能和functools.partial

map(functools.partial(dict.get(), 'k1'), the_list) 

但它是錯的,因爲我只能用functools.partial綁定的第一個參數。

那麼有沒有pythonic方法來做到這一點?

+0

爲什麼「不循環」?列表理解是「循環」嗎? – 2014-09-04 13:59:12

回答

6

您可以使用operator.itemgettermap

>> from operator import itemgetter 
>>> map(itemgetter('k1'), data) 
['v11', 'v12', 'v13'] 

但是性能聰明的它沒有優勢等效列表理解版本:

>>> data = data *1000 
>>> %timeit map(itemgetter('k1'), data) 
10000 loops, best of 3: 170 µs per loop 
>>> %timeit [x['k1'] for x in data] 
10000 loops, best of 3: 166 µs per loop 
2

如果你想與map要做到這一點,使用operator.itemgetter('k1')

map(operator.itemgetter('k1'), the_list) 

我個人用一個列表理解來代替,雖然:

[d['k1'] for d in the_list] 
1

您還可以使用lambda

map(lambda x:x.get('k1'), the_list) 
相關問題