如何从字典列表中获取所有值的列表?

时间:2016-12-20 16:18:02

标签: python python-3.x

我有一个词典列表,我试图创建另一个只列出值的列表。此列表如下所示:create view table employee_decimal as select name , address , age , cast(regexp_replace(salary, ',', '.') as decimal(7,3)) as salary , doj from employee;

这或多或少是我尝试做的事情。这运行正常:

a = [{'c1': 100}, {'c2': 222}, {'c3': 333}]

我试图通过快速列表理解来完成所有操作,但收到错误:at = [] for elem in a: for i in elem: at.append(elem[i]) 。这就是我一直在尝试的:KeyError: 'c3'

我只想要at = [elem[i] for i in elem for elem in a]

5 个答案:

答案 0 :(得分:4)

您可以将itertools.chain列表理解表达式一起使用:

>>> from itertools import chain
>>> list(chain(*[item.values() for item in a]))
[100, 222, 333]

OR,嵌套列表理解表达式为:

>>> [val for item in a for val in item.values()]
[100, 222, 333]

或者,您可以使用list.extend以及简单的for循环(作为替代,但我知道您要求列表理解):

new_list = []
for item in a:
    new_list.extend(item.values())

# Final value hold by `new_list` will be:
# [100, 222, 333]

答案 1 :(得分:4)

您需要交换循环的顺序,以便可以对其进行评估。

at = [elem[i] for elem in a for i in elem]
=> None
at
=> [100, 222, 333]

答案 2 :(得分:3)

如何简单地联接或chain所有dict.values

>>> from itertools import chain
>>> a = [{'c1': 100}, {'c2': 222}, {'c3': 333}]
>>> list(chain.from_iterable(map(dict.values, a)))
[100, 222, 333]

答案 3 :(得分:2)

>>> res = []
>>> for x in a:
        res.extend(x.values())
>>> res
[100, 222, 333]

如果只有一个值,则可以使用:

>>> [list(x.values())[0] for x in a]
[100, 222, 333]

答案 4 :(得分:1)

试试这个:

at = []
for elem in a:
    at += elem.values()

dict.values()会返回一个包含dict所有值的列表。对于您的情况,它将为每个元素返回一个包含单个组件的列表,因此您只需将其与at列表连接起来。