我有一个如下所示的词典:
myDict = {'a':['1','2','3'],'b':['1','2'],'c':['1','2','3','4']}
我正在尝试迭代其所有值,如下所示:
for i in myDict.iterkeys():
for j in range(0,len(myDict[i])):
print myDict[i][j]
我在stackoverflow here和here上看到了几个帖子。但是我想知道是否有更快的方法可以做到这一点,而不必使用两个for循环?
答案 0 :(得分:2)
你可以说
for sub_list in myDict.values():
for item in sub_list:
print(item)
但是在循环问题中,这并没有真正回答你的循环。在给定包含列表的字典的情况下,嵌套迭代不会成为解决方案。
答案 1 :(得分:2)
这是一个for循环的解决方案。
for i in reduce(lambda x, y: x+y, myDict.values()):
print i
myDict.values
它是一个列表清单。
In [33]: myDict.values()
Out[33]: [['1', '2', '3'], ['1', '2', '3', '4'], ['1', '2']]
使用reduce
我就像一个列表一样。
In [34]: reduce(lambda x, y: x+y, myDict.values())
Out[34]: ['1', '2', '3', '1', '2', '3', '4', '1', '2']
然后迭代
修改强>
关于使用timeit
In [69]: def test1():
for sublist in myDict.values():
for value in sublist:
print(value)
....:
In [70]: def test2():
for i in reduce(lambda x, y: x+y, myDict.values()):
print i
....:
In [71]: %timeit test1
10000000 loops, best of 3: 27 ns per loop
In [72]: %timeit test2
10000000 loops, best of 3: 25.6 ns per loop
表现更好。
按照timeit
模块
In [81]: timeit.timeit(test2, number=10000)
Out[81]: 0.016376018524169922
In [82]: timeit.timeit(test1, number=10000)
Out[82]: 0.023879051208496094
答案 2 :(得分:1)
您可以从字典中获取值,并从子列表中获取值,无需键或索引:
for sublist in myDict.values():
for value in sublist:
print(value)