所有键和列表值对的字典可迭代

时间:2018-04-11 07:51:35

标签: python dictionary iterable

我正在寻找可以返回键值组合的字典(或简单解决方案)上的方法。

dictionary = {'foo': ['bar', 'baz'],
              'spam': ['eggs']}

我想要的是还解开列表的键值对的组合。

例如:

'foo', 'bar'
'foo', 'baz'
'spam', 'eggs'

tuples = []
for key in dictionary:
    for value in dictionary.get(key):
        tuples.append((key, value))

上述工作,但我很好奇是否存在可以复制这些循环的现有itertool或字典方法。

5 个答案:

答案 0 :(得分:3)

>>> dictionary
{'foo': ['bar', 'baz'], 'spam': ['eggs']}
>>> [(k, v) for k, l in dictionary.items() for v in l]
[('foo', 'bar'), ('foo', 'baz'), ('spam', 'eggs')]

当然,这也适用于发电机或其他任何需要它的环境。

答案 1 :(得分:1)

这不是内置功能,但您可以轻松实现这一目标。

mydict = {'foo': ['bar', 'baz'],
          'spam': ['eggs']}

for key, value in ((k,v) for (k, vs) in mydict.items() for v in vs):
     print(key, value)

或者将它们作为列表

items = [(k, v) for (k,vs) in mydict.items() for v in vs]

答案 2 :(得分:0)

试试这个。

for key in dictionary:
    for item in dictionary[key]:
        print key, item

答案 3 :(得分:0)

初学者的另一种简单方式

dictionary = {'foo': ['bar', 'baz'], 'spam': ['eggs']}

for key, value in dictionary.items():
    for item in value:
        print((key, item))

请注意使用括号在输出上创建元组。

答案 4 :(得分:0)

使用yield编写生成器。

而不是将输出作为列表填充在内存中。 unpack函数在go上创建所需的输出,如果字典中有大量的键,这非常有用。

mydict = {'foo': ['bar', 'baz'],
      'spam': ['eggs']}

def unpack(dictionay):
    for key, values in dictionay.items():
        for val in values:
            yield key,val 

for k, v in unpack(mydict):
    print k, v