2012-05-10 122 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

相關問題