从具有列表值的字典创建元组对

时间:2016-03-07 04:02:46

标签: python dictionary

我正在尝试从列表中获取元组对的列表,列表中包含值。

d={ 'a': [1,2], 'b': [4,5], 'c': [7,8] }
print(d.items())
>>[('a', [1, 2]), ('b', [4, 5]),('c', [7, 8]) ]

如何获取此表单中的列表

[('a', 1),('a', 2), ('b',4),('b',5),('c',7),('c',8)]

3 个答案:

答案 0 :(得分:2)

使用简单的列表理解:

d = {'a': [1,2,3], 'b': [4,5,6]}
l = [(k, v) for k in d for v in d[k]]
print(l)  # => [('a', 1), ('a', 2), ('a', 3), ('b', 4), ('b', 5), ('b', 6)]

可能有其他方法可以做到,但这很简单,不需要其他库。

答案 1 :(得分:2)

简单,使用单行:)

>>>
>>> d={ 'a': [1,2], 'b': [4,5], 'c': [7,8] }
>>> [(key,item) for item in value for  key, value in d.iteritems()]
[('a', 4), ('c', 4), ('b', 4), ('a', 5), ('c', 5), ('b', 5)]
>>>

如果你想对使用内置功能进行排序

>>> d={ 'a': [1,2], 'b': [4,5], 'c': [7,8] }
>>> sorted([(key,item) for item in value for  key, value in d.iteritems()])
[('a', 4), ('a', 5), ('b', 4), ('b', 5), ('c', 4), ('c', 5)]
>>>

答案 2 :(得分:1)

>>> d = {'a': [1, 2], 'b': [4, 5], 'c': [7, 8]}

您可以使用dict.items()访问键值对。

>>> list(d.items())
[('a', [1, 2]), ('c', [7, 8]), ('b', [4, 5])]

然后你可以遍历对并迭代列表值:

>>> [(key, value) for (key, values) in d.items()
...  for value in values]
[('a', 1), ('a', 2), ('c', 7), ('c', 8), ('b', 4), ('b', 5)]

字典键不按字母顺序排序。如果您想要问题中的确切输出,则需要在创建列表之前或之后对其进行排序:

>>> pairs = _
>>> sorted(pairs)
[('a', 1), ('a', 2), ('b', 4), ('b', 5), ('c', 7), ('c', 8)]