蟒蛇:字典的平面列表值

问题描述:

我有一个dictslist如此:蟒蛇:字典的平面列表值

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

我试图得到一个平坦的一套价值观像{1,2,3,4,5}list关键。什么是最快的方法?

你可以写这样一个循环:

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

,我认为将工作相当快。

或者你可以简单地使用集理解,这将导致以下一行代码

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',())} 
+0

@SethMMorton:是的,出于某种原因,我已经混合了不同的理解整天;)。 –

+0

我必须说,我认为集合理解比我的'itertools'解决方案更清晰。 – SethMMorton

+0

@SethMMorton我同意,但我认为'set.union'可能更清洁 –

不清楚你“最快”的定义是什么,但是不管它是速度或行数我会使用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'键的元素;如果你知道这永远是真的,你可以省略。