python-3.x - 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']))
我已经尝试了几乎所有针对相同问题标题的其他解决方案,但都徒劳无功。请帮忙
解决方案
问题是您在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'}]
推荐阅读
- c++ - 为什么这段代码抱怨“非类型模板参数不能有类型”?
- regex - 在 pyspark 的 regexp_replace 函数中使用字典
- javascript - JavaScript 函数和事件
- python-3.x - 用 python Beautifulsoup 抓取
- java - 错误:Model::findById 需要参数 id loopback android
- javascript - 编辑最小化 javascript 的源代码
- c# - 将 ulong 从 c++ 转移到 c#
- python - 为什么python不返回None?
- php - Wordpress 插件 - 需要添加 PHP 功能
- php - 参数无效的 Pdo 错误