2016-11-15 122 views
-1

什麼是遍歷列表中的所有索引的最佳方式是列表中的鍵值?即python迭代密鑰的列表值

mydict = {'key1': [92,4], 'key2': [1,4,3], 'key3': [1,8,2], 'key4': [9925,2,4] }

我想遍歷每個鍵,在列表中exaust所有的值,然後移動到下一個關鍵。使用iteritems我無法做到這一點。 有沒有辦法做到這一點沒有嵌套forloops

for key, value in mydict.iteritems(): 
    print '{}: {}'.format(key, value)' 

這給了我下面的輸出:

key3: [1, 8, 2] 
key2: [1, 4, 3] 
key1: [92, 4] 
key4: [9925, 2, 4] 

我期待獲得輸出像

key3: 1 
key3: 8 
key3: 2 

等。

+1

最終,您將無法避免某種嵌套循環。 我可能會寫它作爲列表理解,但它仍然只是一個花式嵌套for循環。 – TemporalWolf

回答

0
for k,v in mydict.items(): # `items()` for python3 `iteritems()` for python2 
    for i in v: 
     print(k, ":", i) 
+0

這個問題,我想知道是否有辦法做到這一點沒有嵌套的循環。 – dobbs

+1

只有代碼的答案不如包含解釋的答案,所以它可以應用於一般情況。 此外,OP正在尋求除嵌套for循環之外的其他方法。 – TemporalWolf

+0

我不確定如果沒有以某種方式嵌套循環,可以這樣做。 – denvaar

0

像這樣的東西應該做的訣竅:

values = ((key, value) for key in mydict.keys() for value in mydict[key]) 
for key, value in values: 
    print('{}: {}'.format(key, value)) 

我們正在遍歷mydict.keys和mydict [鍵]生成鍵值對。將所得值發生器的產率(key3,1)然後(key3,8)等

+0

可能是最好的選擇,但是,這可以歸結爲嵌套for循環'((key,value)'爲'mydict.keys()'中的''爲'mydict [key]中的'''')。 – TemporalWolf

+0

還值得一提的是,作爲一個發電機,你只能做一次。如果你需要'values'來重用,你應該使用列表理解 – TemporalWolf

0

使用乘法操作者*以獲取字符串格式化所需要的參數的數目的溶液:

mydict = {'key1': [92,4], 'key2': [1,4,3], 'key3': [1,8,2], 'key4': [9925,2,4] } 

for k, v in mydict.items(): 
    print((k + ' : %s\n')*len(v) % tuple(v)) 

輸出:

key3 : 1 
key3 : 8 
key3 : 2 

key4 : 9925 
key4 : 2 
key4 : 4 

key2 : 1 
key2 : 4 
key2 : 3 

key1 : 92 
key1 : 4