将字典列表转换为只是值的无序列表?

时间:2014-07-08 12:37:16

标签: python

如果订单不重要,如何快速将字典列表转换为仅包含值的简单列表?

例如:

results = [{'id':'abcd'},
           {'id':'bcde'},
           {'id':'cdef'}]

简单地

results = ('abcd','bcde','cdef')

4 个答案:

答案 0 :(得分:3)

你可以试试这个:

>>> results = [{'id':'abcd'},
...            {'id':'bcde'},
...            {'id':'cdef'}]
>>>
>>> tuple(d['id'] for d in results)
('abcd', 'bcde', 'cdef')

请注意,这不是列表,而是元组。如果你想要一个列表:

>>> [d['id'] for d in results]
['abcd', 'bcde', 'cdef']

答案 1 :(得分:1)

这应该这样做:

>>> [val for dic in results for val in dic.values()]

['abcd', 'bcde', 'cdef']

如果你想要一个元组,只需将tuple括在一个parens中:

>>> tuple(val for dic in results for val in dic.values())

('abcd', 'bcde', 'cdef')

即使字典有多个值,也不管字典中的键是什么,上述两种方法都能正常工作。

答案 2 :(得分:1)

这将适合您的样本数据:

import operator
map(operator.itemgetter('id'), results)

e.g。

results = [{'id':'abcd'},
       {'id':'bcde'},
       {'id':'cdef'}]

import operator
print map(operator.itemgetter('id'), results)

>>> ['abcd', 'bcde', 'cdef']

但是,通常,您可以在列表中链接每个字典的值:

import itertools
print list(itertools.chain(*map(dict.values, results)))

>>> ['abcd', 'bcde', 'cdef']

答案 3 :(得分:0)

听起来你基本上想做的是将所有词典的值连接成一个列表。内置的reduce()函数可以将代码转换为相对简单的代码:

reduce(lambda a, b: a+b, (d.values() for d in results))

会给:

['abcd', 'bcde', 'cdef']

您可以向tuple()添加外部通话,如果这是您真正想要的内容:

('abcd', 'bcde', 'cdef')