如何在Python中使用string作为列表的索引

时间:2011-12-21 16:30:01

标签: python

     for line in f.readlines():
     (addr, vlanid, videoid, reqs, area) = line.split()

     if vlanid not in dict:
          dict[vlanid] = []

     video_dict = dict[vlanid]

     if videoid not in video_dict:
         video_dict[videoid] = []

     video_dict[videoid].append((addr, vlanid, videoid, reqs, area))

这是我的代码,我想使用videoid作为索引来创建列表。 videoid的真实数据是不同的字符串,如下所示:FYFSYJDHSJ

我收到此错误消息:

video_dict[videoid] = []
TypeError: list indices must be integers, not str

但是现在如何在这种情况下为不同的字符串添加1,2,3,4之类的标识符?

3 个答案:

答案 0 :(得分:4)

使用字典而不是列表:

if vlanid not in dict:
    dict[vlanid] = {}

P.S。我建议您拨打dict其他内容,以免影响内置dict

答案 1 :(得分:2)

不要将dict用作变量名称。试试这个(d代替dict):

d = {}
for line in f.readlines():
    (addr, vlanid, videoid, reqs, area) = line.split()
    video_dict = d.setdefault(vlanid, {})
    video_dict.setdefault(videoid, []).append((addr, vlanid, videoid, reqs, area))

答案 2 :(得分:0)

如上所述,创建字典将是最理想的代码。 (虽然你应该避免调用它们dict,因为这意味着对Python很重要。

您的代码可能与@aix上面已发布的内容类似:

for line in f.readlines():
    d = dict(zip(("addr", "vlanid", "videoid", "reqs", "area"), tuple(line.split())))

您可以在代码中稍后使用字典d执行某些操作。请记住 - 遍历此字典意味着,如果在循环完成之后不使用d,则只能从文件中获取最后一个值。