我有一个字典(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]中的项目是什么?”
答案 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))