2012-05-10 127 views
-2

我有这种形式的字典...如何打印字典值列表,列表中的一个值,为每个键

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 

所以我必须打印所有值,其中值是一个更字典主密钥,在每个时刻i应该打印ķDICT安永为每个列表项 谁能帮助我在此先感谢

+0

你试过了什么?你有没有尝试过什么? –

+1

这个数据结构是否正确? – jdi

+0

这不是'dict'。我假设它应该是这样的,所以我会编辑它:'d = {'s1':{'a':[1,2,3],'b':[4,5,6]},'s2' :{'d':[77,88,99],'e':[666,333,444]}}' – jamylak

回答

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 
+0

这可能是最好的你可以得到,因为你必须假设所有列表的长度将相等,并采取第一长度。 – jdi

+0

@srgerg谢谢你的代码工作正常,你可以解释你的代码在做什么与评论.......感谢您的帮助 – user1182090

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 

说明

它获得与t的值对字典中的每个列表的他键,以便

{'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)进来的元组被写入。见doc

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

然后名单zippped在一起。

>>> zip(*starmap(product,sorted(d.items()))) 
[(('a', 1), ('b', 4)), (('a', 2), ('b', 5)), (('a', 3), ('b', 6))] 
+0

谢谢你的代码也在工作可以expalin什么是产品,starmap .... 。 – user1182090

+0

@ user1182090好吧,我会为此添加解释 – jamylak

相关问题