【问题标题】:Python unable to access all the elements of lists list IndexError: list index out of rangePython无法访问列表的所有元素列表IndexError:列表索引超出范围
【发布时间】:2019-01-11 22:49:44
【问题描述】:

我有一个带有列表的变量

list1 = [{u'key': 1, u'doc_count': 17804}]
[{u'key': u'01', u'doc_count': 516}, {u'key': u'10', u'doc_count': 368},  {u'key': u'50', u'doc_count': 156}, {u'key': u'02', u'doc_count': 116}]
[{u'key': u'40', u'doc_count': 1144},{u'key': u'4P', u'doc_count': 127}]
[u'key': 0, u'doc_count': 16342}, {u'key': 1, u'doc_count': 1462}]

我想访问这样的所有元素:

{u'key': 1, u'doc_count': 17804}
{u'key': u'01', u'doc_count': 516}
{u'key': u'10', u'doc_count': 368}
{u'key': u'50', u'doc_count': 156}
{u'key': u'02', u'doc_count': 116}
{u'key': u'40', u'doc_count': 1144}
{u'key': u'4P', u'doc_count': 127}
{u'key': 0, u'doc_count': 16342}
{u'key': 1, u'doc_count': 1462}

但我只能像使用

一样访问每个列表的第一个元素
list1[0] = 
{u'key': 1, u'doc_count': 17804}
{u'key': u'01', u'doc_count': 516}
{u'key': u'40', u'doc_count': 1144}
{u'key': 0, u'doc_count': 16342}

我无法访问这些列表的第二个、第三个等元素。 我尝试了 list[1],但出现索引错误。

【问题讨论】:

  • 您的数据样本似乎与list1[0] 的输出示例不匹配。我认为您的示例中缺少一些逗号和括号。

标签: python json python-2.7 list


【解决方案1】:

我认为您错误地定义了列表列表,这就是您收到错误的原因。除此之外,您还缺少一个字典左大括号,我认为这是一个错字。

list1 = [{u'key': 1, u'doc_count': 17804}]
#####################THIS LIST ENDS HERE ^
#all below lines are not considered
[{u'key': u'01', u'doc_count': 516}, {u'key': u'10', u'doc_count': 368},  {u'key': u'50', u'doc_count': 156}, {u'key': u'02', u'doc_count': 116}]
[{u'key': u'40', u'doc_count': 1144},{u'key': u'4P', u'doc_count': 127}]
[{u'key': 0, u'doc_count': 16342}, {u'key': 1, u'doc_count': 1462}]

#You only have one item in list1 so you will get an error

#lets now make it a proper list of lists
list1 = [ #<see this open brackets?
[{u'key': 1, u'doc_count': 17804}],
[{u'key': u'01', u'doc_count': 516}, {u'key': u'10', u'doc_count': 368},  {u'key': u'50', u'doc_count': 156}, {u'key': u'02', u'doc_count': 116}],
[{u'key': u'40', u'doc_count': 1144},{u'key': u'4P', u'doc_count': 127}],
[{u'key': 0, u'doc_count': 16342}, {u'key': 1, u'doc_count': 1462}]
] #it ends here

#python 2.7x
for sublist in list1:
    for d in sublist:
        print(d)

#print all of the dicts - python 3.x
#[print(dict) for sublist in list1 for dict in sublist]

输出

{'key': 1, 'doc_count': 17804}
{'key': '01', 'doc_count': 516}
{'key': '10', 'doc_count': 368}
{'key': '50', 'doc_count': 156}
{'key': '02', 'doc_count': 116}
{'key': '40', 'doc_count': 1144}
{'key': '4P', 'doc_count': 127}
{'key': 0, 'doc_count': 16342}
{'key': 1, 'doc_count': 1462}

【讨论】:

  • 但是list1[0] 不会给出问题中 OP 显示的输出。它也不是有效的 JSON,问题被标记了。我决定删除我的答案,因为 OP 实际上并没有给出可重现的例子,所以为他们做修复似乎有点毫无意义。
  • @roganjosh 我认为 OP 已经提到“我只能像 with 一样访问每个列表的第一个元素”。我认为他的意思是第一个字典。
【解决方案2】:

在您的代码中,您有 4 个独立列表(字典),第一个名称为 list1,其他没有名称。

list1 列表只有 1 个元素(字典),因此它的唯一有效索引是 0 - list1[0] 有效,但 list[1] 无效,因为这样的元素不存在

您可能想要连接所有这些列表,因此快速解决方法是在前 3 行附加
+ \:

list1 = [{u'key': 1, u'doc_count': 17804}] + \
    [{u'key': u'01', u'doc_count': 516}, {u'key': u'10', u'doc_count': 368},  {u'key': u'50', u'doc_count': 156}, {u'key': u'02', u'doc_count': 116}] + \
    [{u'key': u'40', u'doc_count': 1144},{u'key': u'4P', u'doc_count': 127}] + \
    [u'key': 0, u'doc_count': 16342}, {u'key': 1, u'doc_count': 1462}]

(为了便于阅读,我还缩进了最后 3 行),但 PEP8 - Style guide for Python Code 更喜欢写成一样的

list1 = ([{u'key': 1, u'doc_count': 17804}]
    + [{u'key': u'01', u'doc_count': 516}, {u'key': u'10', u'doc_count': 368},  {u'key': u'50', u'doc_count': 156}, {u'key': u'02', u'doc_count': 116}]
    + [{u'key': u'40', u'doc_count': 1144},{u'key': u'4P', u'doc_count': 127}]
    + [u'key': 0, u'doc_count': 16342}, {u'key': 1, u'doc_count': 1462}])

(在括号中以避免需要行继续符号\,并带有前缀运算符+。)

其他选项是删除除第一个和最后一个以外的所有方括号在前 3 行末尾放置逗号:

list1 = [{u'key': 1, u'doc_count': 17804},
    {u'key': u'01', u'doc_count': 516}, {u'key': u'10', u'doc_count': 368},  {u'key': u'50', u'doc_count': 156}, {u'key': u'02', u'doc_count': 116},
    {u'key': u'40', u'doc_count': 1144},{u'key': u'4P', u'doc_count': 127},
    u'key': 0, u'doc_count': 16342}, {u'key': 1, u'doc_count': 1]

在这种情况下,也不需要换行符\

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2016-08-25
    • 2017-04-05
    • 2012-07-15
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多