1

我有一本字典

input = {
    1:[23,24],
    2:[21],
    3:[23],
    4:[]
    }

我想要这样的输出:-

output = (1,23),(1,24),(2,21),(3,23)

我使用两个 for 循环来做到这一点:-

>>> for key in input:
...     for value in input[key]:
...         print """(""" + str(key) + """,""" +str(value) + """)"""
... 
(1,23)
(1,24)
(2,21)
(3,23)

有人可以告诉我另一种方法吗?使用一些迭代器工具或任何其他方式?

谢谢

4

2 回答 2

5
>>> [(key, value) for key, values in input.items() for value in values]
>>> [(1, 23), (1, 24), (2, 21), (3, 23)]
>>> '\n'.join('({},{})'.format(key, value) for key, values in input.items() for value in values)
'(1,23)\n(1, 24)\n(2, 21)\n(3, 23)'
>>> print('\n'.join('({},{})'.format(key, value) for key, values in input.items() for value in values))
(1,23)
(1,24)
(2,21)
(3,23)
>>> ','.join('({},{})'.format(key, value) for key, values in input.items() for value in values)
'(1,23),(1,24),(2,21),(3,23)'
于 2013-07-12T08:59:00.267 回答
1

好问题。这是一些pythonic解决方案。期待更多pythonic解决方案的出现。

input = {
1:[23,24],
2:[21],
3:[23],
4:[]
}
def get_tuple(key,list):
    def map_key_value(element):
        return (key,element)
    return map(map_key_value,list)

def list_extend(elem1, elem2):
    elem1.extend(elem2)
    return elem1

print reduce(list_extend,map(get_tuple, input.keys(), input.values()))

>>> [(1, 23), (1, 24), (2, 21), (3, 23)]

这是简短的解释:

map(get_tuple, input.keys(), input.values()) 将返回给我们

>>> [[(1, 23), (1, 24)], [(2, 21)], [(3, 23)], []]

基本上我们会得到列表的列表。然后我们将这个列表传递给reduce,它为我们提供了一个列表,将所有列表组合为一个。因此,我们会得到——

>>> [(1, 23), (1, 24), (2, 21), (3, 23)]。

于 2013-07-12T11:23:17.827 回答