如果订单不重要,如何快速将字典列表转换为仅包含值的简单列表?
例如:
results = [{'id':'abcd'},
{'id':'bcde'},
{'id':'cdef'}]
简单地
results = ('abcd','bcde','cdef')
答案 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')