热点通过某个键收集列表项目的值?

atu*_*pal 0 python dictionary functional-programming list

假设我们有一个dicts列表:

[
  {
    'k1': 'v11',
    'k2': 'v21',
    'k3': 'v31'
  },
  {
    'k1': 'v12',
    'k2': 'v22',
    'k3': 'v32'
  },
  {
    'k1': 'v13',
    'k2': 'v23',
    'k3': 'v33'
  }
]
Run Code Online (Sandbox Code Playgroud)

我想得到所有值的关键是k1:[v11, v12, v13],但不使用循环.

我试着使用map函数和functools.partial:

map(functools.partial(dict.get(), 'k1'), the_list)
Run Code Online (Sandbox Code Playgroud)

但这是错误的,因为我只能使用绑定第一个参数functools.partial.

那么有没有pythonic方法来做到这一点?

Ash*_*ary 6

你可以用operator.itemgettermap:

>> from operator import itemgetter
>>> map(itemgetter('k1'), data)
['v11', 'v12', 'v13']
Run Code Online (Sandbox Code Playgroud)

但是表现明智,它没有优于同等列表理解版本:

>>> 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
Run Code Online (Sandbox Code Playgroud)