2016-11-15 117 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