如何打印dict值列表,每个键列表中的一个值

时间:2012-05-10 05:52:25

标签: python dictionary

我有这种形式的词典......

d={'s1':{'a':[1,2,3],'b':[4,5,6]},'s2':{'d':[77,88,99],'e':[666,333,444]}}

所以我想以这种格式打印

s1
a, 1
b,4
s1

s1
a,2
b,5
s1

s1
a,3
b,6
s1

s2
d,77
e,666
s2

s2
d,88
e,333
s2

s2
d,99
e,444
s2

我试过这个方法

for k,v in d.items():
    print k
    for key,val in v.items():
        print key,val[0] # But this v[0] should change and key also should changthat i am not getting for same loop
    print k

所以我必须为所有值打印主键,其中值是另一个dict,每次我应该打印每个列表项的键时该dict 任何人都可以提前帮助我

2 个答案:

答案 0 :(得分:3)

>>> from itertools import product, starmap
>>> d={'s1':{'a':[1,2,3],'b':[4,5,6]},'s2':{'d':[77,88,99],'e':[666,333,444]}}
>>> for k,v in sorted(d.items()): # use d.iteritems for py2
        for x,y in zip(*starmap(product,sorted(v.items()))):
            print k
            print '{0},{1}'.format(*x)
            print '{0},{1}'.format(*y)
            print k
            print


s1
a,1
b,4
s1

s1
a,2
b,5
s1

s1
a,3
b,6
s1

s2
d,77
e,666
s2

s2
d,88
e,333
s2

s2
d,99
e,444
s2

<强>解释

它使用字典中每个列表的键获取值对

{'a':[1,2,3],'b':[4,5,6]}

变为

[(('a', 1), ('b', 4)), (('a', 2), ('b', 5)), (('a', 3), ('b', 6))]

以下是如何做到的:

第一行遍历d中的每个键和值。这些必须进行排序,因此我可以按升序迭代,因为词典没有订单。

键的值是一个类似下面的字典,它按键,值对的元组排序。

d = {'a':[1,2,3],'b':[4,5,6]}
>>> sorted(d.items())
[('a', [1, 2, 3]), ('b', [4, 5, 6])]

然后product用于获取与每个值配对的密钥。

>>> [product(*x) for x in sorted(d.items())]
# iterates through [('a', 1), ('a', 2), ('a', 3)], [('b', 4), ('b', 5), ('b', 6)]

这可以使用starmap更简单地编写,map的构建方式类似product,尽管函数的参数(在本例中为>>> starmap(product,sorted(d.items())) # iterates through [('a', 1), ('a', 2), ('a', 3)], [('b', 4), ('b', 5), ('b', 6)] )来自元组。见doc

zippped

然后列表>>> zip(*starmap(product,sorted(d.items()))) [(('a', 1), ('b', 4)), (('a', 2), ('b', 5)), (('a', 3), ('b', 6))] 在一起。

{{1}}

答案 1 :(得分:0)

这是一种方式:

>>> d={'s1':{'a':[1,2,3],'b':[4,5,6]},'s2':{'d':[77,88,99],'e':[666,333,444]}}
>>> for k in sorted(d.keys()):
...   v = d[k]
...   for i in xrange(len(v.values()[0])):
...     print k
...     for k2 in sorted(v.keys()):
...       v2 = v[k2]
...       print "%s,%d" % (k2, v2[i])
...     print "%s\n" % k
... 

当我跑步时,它打印出来:

s1
a,1
b,4
s1

s1
a,2
b,5
s1

s1
a,3
b,6
s1

s2
d,77
e,666
s2

s2
d,88
e,333
s2

s2
d,99
e,444
s2