首页 > 解决方案 > Python3 TypeError:字符串索引必须是整数

问题描述

我是 python 编程的新手。我正在尝试实现一个从文件中读取数据并以表格格式显示它的代码。但是,当我尝试运行我的代码时,它给出的错误如下:

TypeError: string indices must be integers

这是我的代码:

from operator import itemgetter
emp_dict = dict()
emp_list = list()
with open('m04_lab_profiles','r') as people:
    for p in people:
        emp_list = p.strip().split(',')
        emp_info = dict()
        emp_info['Name'] = emp_list[0]
        emp_info['Location'] = emp_list[1]
        emp_info['Status'] = emp_list[2]
        emp_info['Employer'] = emp_list[3]
        emp_info['Job'] = emp_list[4]
        emp_dict[emp_list[0]] = emp_list
        emp_list.append(emp_info)
for info in emp_list:
         print("{0:20}   {1:25}  {2:20}  {3:20}  {4:45}".format(int(info['Name'],info['Location'],info['Status'],info['Employer'],info['Job'])))

print("\n\n")
info_sorted = sorted(emp_list,key=itemgetter('Name'))
for x in info_sorted:
     print("{0:20}   {1:25}  {2:20}  {3:20}  
     {4:45}".format(emp_info['Name'],

     emp_info['Address'],                                       
     emp_info['Status'],                                                       
     emp_info['Employer'],                                                       
     emp_info['Job']))

我已经尝试了几乎所有针对相同问题标题的其他解决方案,但都徒劳无功。请帮忙

标签: python-3.x

解决方案


问题是您在emp_list循环内部和外部都使用。结果是,一旦您加载了文件,您的列表就会包含一些字符串元素(需要整数索引)和一些 dicts 元素(具有更灵活的索引规则)。具体来说,使用一个看起来像的示例文件

name,location,status,employer,job
name2,location2,status2,employer2,job2

循环之后,emp_list看起来像

In [3]: emp_list
Out[3]:
['name2',
 'location2',
 'status2',
 'employer2',
 'job2',
 {'Name': 'name2',
  'Location': 'location2',
  'Status': 'status2',
  'Employer': 'employer2',
  'Job': 'job2'}]

对此的解决方法是使用不同的临时列表作为.split(',')调用的输出。IE

In [4]: from operator import itemgetter
   ...: emp_dict = dict()
   ...: emp_list = list()
   ...: with open('m04_lab_profiles','r') as people:
   ...:     for p in people:
   ...:         tmp = p.strip().split(',')
   ...:         emp_info = dict()
   ...:         emp_info['Name'] = tmp[0]
   ...:         emp_info['Location'] = tmp[1]
   ...:         emp_info['Status'] = tmp[2]
   ...:         emp_info['Employer'] = tmp[3]
   ...:         emp_info['Job'] = tmp[4]
   ...:         emp_dict[tmp[0]] = emp_info
   ...:         emp_list.append(emp_info)
   ...:
   ...:

In [5]: emp_list
Out[5]:
[{'Name': 'name',
  'Location': 'location',
  'Status': 'status',
  'Employer': 'employer',
  'Job': 'job'},
 {'Name': 'name2',
  'Location': 'location2',
  'Status': 'status2',
  'Employer': 'employer2',
  'Job': 'job2'}]

推荐阅读