【问题标题】:list of dictionaries (create/handle)字典列表(创建/处理)
【发布时间】:2019-03-27 17:35:02
【问题描述】:

我正在尝试创建 10 个房间,其中包含随机数量的盒子和苹果。 当我尝试显示它们时,我收到此错误:“IndexError('list index out of range',)” 此外,我正在寻找处理多个字典并对其进行处理的最佳方法。 这是我的代码:

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])

【问题讨论】:

  • 在 python 中,列表是零索引的。将range(1, 11) 都替换为range(10)
  • 迭代列表中的内容时,只需执行for item in rooms: print(item)。 (这对你底部循环有用)
  • rooms[10] 不存在,因为最后一个索引将是 9 而不是 10。正如其他更改为 range(10) 所评论的那样应该可以解决问题

标签: python list dictionary


【解决方案1】:
for i in range(1,11):
    print(rooms[i])

问题出在哪里。

Python 索引从零开始。

所以它就像 (0,1,2,3, 等等..)

所以你必须这样做:

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)

【讨论】:

    【解决方案2】:
    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 开始,因此房间列表包含索引 010 的项目。 因此,在将 dict 附加到列表后打印列表时,您必须从 0 开始索引到列表的长度。

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

    【讨论】:

    • 感谢您提供代码 sn-p,它可能会提供一些有限的即时帮助。通过描述为什么这是解决问题的好方法,正确的解释将极大地改进其long-term value,并使其对有其他类似问题的未来读者更有用。请编辑您的答案以添加一些解释,包括您所做的假设。
    • @sepehr 明白。
    【解决方案3】:

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

    for room in rooms:
        print(room)
    

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

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

    第一种方式更直接地表达了您想要的内容,并且可以避免您的范围语句出现错误。

    【讨论】:

      【解决方案4】:

      显示错误是因为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)

      【讨论】:

        【解决方案5】:

        问题是你正在使用:

        for i in range(1,11)
        

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

        改为使用:

        for i in range(10)
        

        【讨论】:

          【解决方案6】:

          它在这里不起作用,因为您的字典列表中的索引从 09 并且您在索引 10 处请求字典强>

          range(1,11) 都替换为range(10) 即可。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-06-09
            • 2010-12-17
            • 2015-05-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多