我如何制作列表的元组列表

时间:2013-05-02 07:35:51

标签: python dictionary

我有这个

d = \
[('a', {'b': 'c1', 'd': 'f1'}),
 ('a', {'bb': 'c2', 'dd': 'f2'}),
 ('a', {'bbb': 'c3', 'ddd': 'f3'})]

我想要像这样的输出

['c1', 'f1', 'f2', 'c2', 'c3', 'f3']

我试过这个

In [51]: [a.values() for k,a in d]
Out[51]: [['c1', 'f1'], ['f2', 'c2'], ['c3', 'f3']]

我想做最简单,最短的方式

3 个答案:

答案 0 :(得分:4)

>>> d = \
[('a', {'b': 'c1', 'd': 'f1'}),
 ('a', {'bb': 'c2', 'dd': 'f2'}),
 ('a', {'bbb': 'c3', 'ddd': 'f3'})]
>>> [y for x in d for y in x[1].values()]
['c1', 'f1', 'f2', 'c2', 'c3', 'f3']

答案 1 :(得分:2)

您可以使用itertools.chain

>>> d=[('a', {'b': 'c1', 'd': 'f1'}),
 ('a', {'bb': 'c2', 'dd': 'f2'}),
 ('a', {'bbb': 'c3', 'ddd': 'f3'})]

>>> from itertools import chain

>>> list(chain.from_iterable( x[1].values() for x in d ))
['c1', 'f1', 'f2', 'c2', 'c3', 'f3']

答案 2 :(得分:0)

使用reduce作为替代答案:

import operator
reduce(operator.add,(a.values() for k,a in d))

也许不是最好的主意,但它确实有效。基本上相当于Blender的

sum([a.values() for k, a in d], [])