字典组合 - 不等的键数和数量。值

时间:2016-09-20 17:33:21

标签: python loops dictionary

我想打印此词典的所有键和值的唯一组合:

items = {'a':[10,100,1000],'b':[11,110],'c':[12,120]}

使用代码,

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

我收到以下输出:

b [11, 110]
c [12, 120]
a [10, 100, 1000]

我想在字典中产生以下结果:

b 11
b 110
c 12
c 120
a 10
a 100
a 1000

键值组合的顺序并不重要,但结果应保留关系。与往常一样,任何与此问题相关的推荐资源和/或搜索字词都将受到赞赏。

3 个答案:

答案 0 :(得分:2)

或者简单地说:

items = {'a':[10,100,1000],'b':[11,110],'c':[12,120]}

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

答案 1 :(得分:1)

你真的很亲密:

items = {'a':[10,100,1000],'b':[11,110],'c':[12,120]}

# iterate on key/items couple
for k,vl in items.items():
    # iterate on all values of the list
    for v in vl:
        # print with a simple format
        print("{} {}".format(k,v))

输出:

a 10
a 100
a 1000
c 12
c 120
b 11
b 110

请注意,您可以使用for k,vl in sorted(items.items()):按排序顺序(a,b,c)打印密钥,内部列表也是如此:

# iterate on key/items couple
for k,vl in sorted(items.items()):
    # iterate on all values of the list
    for v in sorted(vl):
        # print with a simple format
        print("{} {}".format(k,v))

输出:

a 10
a 100
a 1000
b 11
b 110
c 12
c 120

答案 2 :(得分:1)

使用itertools.chain.from_iterableslist comprehension,您可以"展平"这是一个元组列表:

In [27]: import itertools

In [28]: list(itertools.chain.from_iterable([[(item_[0], v) for v in item_[1]] for item_ in items.items()]))
Out[28]: 
[('a', 10),
 ('a', 100),
 ('a', 1000),
 ('c', 12),
 ('c', 120),
 ('b', 11),
 ('b', 110)]

通过这种方式,您可以轻松地执行任何您想要的操作:

In [29]: for k, v in itertools.chain.from_iterable([[(item_[0], v)     for v in item_[1]] for item_ in items.items()]):
   ....:     print k, v
   ....:     
a 10
a 100
a 1000
c 12
c 120
b 11
b 110