迭代列表的字典

时间:2014-04-29 21:36:36

标签: python

我有一个字典(dict_of_lists),其值为元组列表(inside_list)。我用10个条目填充字典,每个条目包含100个元组的列表。执行此操作的代码如下:

inside_list = []
dict_of_list = collections.defaultdict(list)
for j in range(0, 10):
    for i in range(0, 100):
        inside_list.append((j, i))
    dict_of_list[j].append(inside_list)

现在,为了迭代字典并仅打印列表inside_list中的所有元组的第二个值(即j值),我想我需要使用2个for循环,一个用于迭代字典,另一个迭代inside_list。所以我写了以下内容:

for k in dict_of_list.keys():
    for item in dict_of_list[k]:
        print(item[1])

然而,我所了解的结果是:

(0, 1)
(0, 1)
(0, 1)
(0, 1)
(0, 1)
(0, 1)
(0, 1)
(0, 1)
(0, 1)
(0, 1)

我的问题是,为什么“item”不是列表inside_list的元组,而是看起来它是完整的inside_list而不是?

为了解决这个问题,我添加了另一个for循环:

for k in dict_of_list.keys():
    for item in dict_of_list[k]:
        for x in item:
          print(x[1])

但是,那么,首先使用for循环语句“dict_of_list [k]中的项目是什么?”

2 个答案:

答案 0 :(得分:3)

您正在执行dict_of_list[j].append(inside_list),因此dict_of_list[j][ [ (x,x),(x,x) ] ](包含单个元素的列表,这是一个元组列表。您可能想要

dict_of_list[j] = inside_list
相反,在这种情况下,您根本不需要defaultdict。另请注意,dict_of_list的所有元素都是相同的单个列表(包含1000个元素),如果您需要不同的列表,请将inside_list初始化移动到第一个循环中。

答案 1 :(得分:0)

这是一个假的例子,还是你真的想要以这种方式组成i,j的列表?

如果是这样,除了内循环之外,还有更有效的方法来生成列表:

dict_of_list = {}
for j in range(10):
    dict_of_list[j] = zip([j]*100,range(100))