如何将字典转换为平面列表?

时间:2014-12-23 00:45:33

标签: python list python-2.7 dictionary

给定Python dict之类的:

{
  'a': 1,
  'b': 2,
  'c': 3
}

使用键和值在线创建平面列表的简单方法是什么? E.g:

['a', 1, 'b', 2, 'c', 3]

3 个答案:

答案 0 :(得分:5)

In [39]: d = {                                   
  'a': 1,
  'b': 2,
  'c': 3
}

In [40]: list(itertools.chain.from_iterable(d.items()))
Out[40]: ['b', 2, 'a', 1, 'c', 3]

请注意,dicts是无序的,这意味着您输入键的顺序并不总是它们的存储顺序。如果您想保留订单,可能需要ordereddict

答案 1 :(得分:5)

由于您使用的是Python 2.7,我建议您使用dict.iteritemsdict.viewitems以及列表理解,就像这样

>>> [item for pair in d.iteritems() for item in pair]
['a', 1, 'c', 3, 'b', 2]
>>> [item for pair in d.viewitems() for item in pair]
['a', 1, 'c', 3, 'b', 2]

dict.iteritemsdict.viewitems优于dict.items,因为他们不会创建键值对列表。

如果您想知道如何编写在Python 3.x中有效的可移植代码,那么您只需迭代这样的键

>>> [item for k in d for item in (k, d[k])]
['a', 1, 'c', 3, 'b', 2]

答案 2 :(得分:1)

您可以使用sum

>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> sum(d.items(), tuple())
('a', 1, 'c', 3, 'b', 2)