词典列表(创建/处理)

时间:2018-10-23 12:59:59

标签: python list dictionary

我正在尝试创建10个房间,其中有随机数量的盒子和苹果。 当我尝试显示它们时,出现以下错误:“ IndexError('列表索引超出范围',)” 另外,我也在寻找处理多个字典并对其进行处理的最佳方法。 这是我的代码:

rooms=[]
for i in range(1,11):
    a={'apples':random.randint(0,3),'box':random.randint(0,2)}
    rooms.append(dict(a))
for i in range(1,11):
    print(rooms[i])

6 个答案:

答案 0 :(得分:0)

这在这里不起作用,因为索引在字典列表中从 0 9 ,并且您要求在索引 10

将两个range(1,11)替换为range(10),它将起作用。

答案 1 :(得分:0)

问题是您正在使用:

for i in range(1,11)

遍历您的列表。您的房间列表长度为10。但是,您要遍历第11个项目,这当然是不存在的(请记住python使用0索引)

相反,使用:

for i in range(10)

答案 2 :(得分:0)

import random
rooms=[]
for i in range(1,11):
    a={'apples':random.randint(0,3),'box':random.randint(0,2)}
    rooms.append(dict(a))
for i in range(0,10):
    print(rooms[i])

编辑1:当您使用第一个循环for i in range(1,11)创建会议室列表时,但在会议室列表中,索引从0开始,因此会议室列表中包含索引{{1}中的项目}至0。 因此,在将字典附加到列表之后打印列表时,您必须从10开始索引到列表的长度。

始终检查列表的第一长度以及列表的开始和结束索引,然后开始打印元素 您编写的此方法适用于在某些特定索引上修改现有列表的情况。 因此,在使用列表时要注意建立索引。

答案 3 :(得分:0)

由于rooms没有任何索引'10',因此显示错误

有一种使用列表理解的更好方法

import random

rooms=[{'apples':random.randint(0,3),'box':random.randint(0,2)} for i in range(10)]

for d in rooms:
    print(d)

如果您要创建10个房间,则可以进行range(10),而无需range(1, 11)

答案 4 :(得分:0)

要遍历集合中的所有元素,可以使用以下命令:

for room in rooms:
    print(room)

当您使用range(...)进行迭代时,实际上是使用一组数字来做同样的事情。您可以这样认为:

for index in [1,2,3,...11]:
    ...

第一种方法可以更直接地表达您想要的内容,并且可以避免range语句出现一次性错误。

答案 5 :(得分:0)

for i in range(1,11):
    print(rooms[i])

是问题。

Python索引从零开始。

它就像(0123等等)。

所以您必须这样做:

for i in range(10):
    print(rooms[i])

或从i中减去1:

for i in range(1,11):
    print(rooms[i-1])

或者只是遍历列表:

for i in rooms:
    print(i)