Python无法访问列表listIndexError的所有元素:列表索引超出范围

时间:2019-01-11 22:49:44

标签: python json python-2.7 list

我有一个带有列表的变量

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],但出现索引错误。

2 个答案:

答案 0 :(得分:0)

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

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}

答案 1 :(得分:0)

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

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

您可能希望将所有这些列表连接起来,所以快速的解决方法是在前三行后加上
list[1]

+ \

(为了便于阅读,我也缩进了最后三行),但是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}]

(在括号中避免使用行连续符号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}]) ,并且使用前缀运算符\。)

其他选择是删除除第一个和最后一个方括号外的所有方括号,并在前三行末尾添加逗号:

+

在这种情况下,也不需要行继续符号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]