Python数组错误:“列表索引必须是整数或切片,而不是列表”

时间:2017-06-30 21:44:19

标签: python list

我是Python的新手,并尝试将两个字符串添加到键值数组中。

这是我的代码:

import os
from numpy import genfromtxt
import re



script_dir = os.path.dirname(r'C:/Users/Kenny/Desktop/pythonReports/')

my_data = genfromtxt('allreports.csv', delimiter=',', dtype=None)


pattern_id = re.compile(r'(?<=eventid\=)(.*)(?=&key)', flags=re.DOTALL)
pattern_key = re.compile(r'(?<=key\=)(.*)(?=&cb)', flags=re.DOTALL)

id_key = {}

for row in my_data:
    eventid = pattern_id.findall(row.decode('utf-8'))
    eventkey = pattern_key.findall(row.decode('utf-8'))
    id_key[eventid] = eventkey

    print(id_key)

这基本上需要一个url,并从中提取两件事。我想接下来这两件事并用这两条信息创建一个关联数组(键/值)。

示例数据为:{123456,412F5BFE1D8A33BC}

并且有数百个网址,因此是数组的原因。

我得到的错误是:

Traceback (most recent call last):
  File "script.py", line 20, in <module>
    id_key[eventid] = [eventkey]
TypeError: list indices must be integers or slices, not list

感谢您对此提供任何帮助,如果需要,我正在使用Python3。

1 个答案:

答案 0 :(得分:2)

首先,您需要一个关联数组,因此请使用dict而不是列表。其次,findall返回一个列表,你想要这个元素。

id_key = {} # replaced [] with {}

for row in my_data:
    eventid = pattern_id.findall(row.decode('utf-8'))[0] # note added [0]
    eventkey = pattern_key.findall(row.decode('utf-8'))[0]
    id_key[eventid] = eventkey

但是,如果你要寻找风格点,我建议你理解这个词汇

id_key = {pattern_id.findall(row.decode('utf-8'))[0]: 
          pattern_key.findall(row.decode('utf-8'))[0] for row in my_data}

或另外一种方式

def id_and_key(line):
    return (pattern_id.findall(line)[0],  
            pattern_key.findall(line)[0])

id_key = dict(id_and_key(row.decode('utf-8')) for row in my_data)