0

我有这个

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']]

我想做最简单和最短的方法

4

3 回答 3

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']
于 2013-05-02T07:37:01.620 回答
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']
于 2013-05-02T07:38:16.880 回答
0

只是使用的替代答案reduce

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

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

sum([a.values() for k, a in d], [])
于 2013-05-02T07:46:44.440 回答