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

dictionary iterable of all key and list value pairs

我正在寻找一种可以 return 键、值组合的字典方法(或简单的解决方案)。

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 或字典方法。

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

当然,这也可以用作生成器或在您需要的任何其他上下文中使用。

试试这个。

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

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

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]

另一种 简单 方法初学者:

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

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

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

使用yield编写生成器。

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

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