假设我们有一个dicts列表:
[
{
'k1': 'v11',
'k2': 'v21',
'k3': 'v31'
},
{
'k1': 'v12',
'k2': 'v22',
'k3': 'v32'
},
{
'k1': 'v13',
'k2': 'v23',
'k3': 'v33'
}
]
我想获得所有的值,其中键是k1
:[v11, v12, v13]
,但使用无循环。
我已经尝试使用map
函数和functools.partial
:
map(functools.partial(dict.get(), 'k1'), the_list)
但这是错误的,因为我只能使用functools.partial
绑定第一个参数。
那么,有什么蟒蛇的方法可以做到这一点吗?
您可以将operator.itemgetter
与map
:一起使用
>> 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
如果要使用map
执行此操作,请使用operator.itemgetter('k1')
:
map(operator.itemgetter('k1'), the_list)
不过,我个人会使用列表理解:
[d['k1'] for d in the_list]
您也可以使用lambda
map(lambda x:x.get('k1'), the_list)