我正在寻找可以返回键值组合的字典(或简单解决方案)上的方法。
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或字典方法。
答案 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