我是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。
答案 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)