python:dict值的平面列表

时间:2017-02-14 18:48:17

标签: python

我有list dicts,如此:

a = [ {'list':[1,2,3]}, {'list':[1,4,5]} ]

我试图在list键中获取一组平面值,例如{1,2,3,4,5}。什么是最快的方式?

3 个答案:

答案 0 :(得分:3)

您可以编写一个循环:

result = set()
for row in a:
    result.update(row['list'])

我认为它会合理地运作。

或者你可以简单地使用 set comprehension ,这将产生以下 one-liner

result = {x for row in a for x in row['list']}

如果并非所有元素都包含'list'键,则可以将.get(..)与空元组一起使用(这将减少构建时间):

result = {x for row in a for x in row.get('list',())}

答案 1 :(得分:3)

目前尚不清楚你对“最快”的定义是什么,但无论是速度还是行数我都会使用itertools和生成器的组合。

>>> import itertools
>>> a = [ {'list':[1,2,3]}, {'list':[1,4,5]} ]
>>> b = set(itertools.chain.from_iterable(x['list'] for x in a if 'list' in x))

请注意,我已针对可能不包含'list'键的任何元素添加了警示;你可以省略,如果你知道这将永远是真的。

答案 2 :(得分:1)

可以通过reduce轻松创建

列表。

您需要使用初始化器-reduce函数中的第三个参数。

reduce(
    lambda  _set, _dict, key='list': _set.update(
          _dict.get(key) or set()) or _set,
    a, 
    set())

以上代码适用于python2和python3,但是您需要将reduce模块导入为from functools import reduce。有关详细信息,请参见下面的链接。