连接dict值,即列表

时间:2017-01-04 04:00:02

标签: python list python-3.x dictionary

假设我有以下dict对象:

test = {}
test['tree'] = ['maple', 'evergreen']
test['flower'] = ['sunflower']
test['pets'] = ['dog', 'cat']

现在,如果我运行test['tree'] + test['flower'] + test['pets'],我会得到结果:

['maple', 'evergreen', 'sunflower', 'dog', 'cat']

这就是我想要的。

但是,假设我不确定dict对象中有哪些键,但我知道所有值都是列表。有没有像sum(test.values())这样的方法可以运行以达到相同的效果?

5 个答案:

答案 0 :(得分:13)

几乎在问题中给出了答案: sum(test.values())仅失败,因为它默认情况下会假定您要将项目添加到起始值0 - 当然,您无法将list添加到int }。但是,如果您明确了起始值,它将起作用:

 sum(test.values(), [])

答案 1 :(得分:6)

一个班轮(假设不需要特定的订购):

>>> [value for values in test.values() for value in values]
['sunflower', 'maple', 'evergreen', 'dog', 'cat']

答案 2 :(得分:5)

使用chain中的itertools

>>> from itertools import chain
>>> list(chain.from_iterable(test.values()))
# ['sunflower', 'maple', 'evergreen', 'dog', 'cat']

答案 3 :(得分:2)

您可以使用functools.reduceoperator.concat(我假设您使用的是Python 3),如下所示:

>>> from functools import reduce
>>> from operator import concat
>>> reduce(concat, test.values())
['maple', 'evergreen', 'sunflower', 'dog', 'cat']

答案 4 :(得分:0)

使用numpy.hstack的另一个简单选择:

import numpy as np

>>> np.hstack(list(test.values()))
array(['maple', 'evergreen', 'sunflower', 'dog', 'cat'], dtype='<U9')