2014-09-04 23 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) 
相关问题