在 Python 中遍历字典时出错
Getting Error while Iterating over Dictionary in Python
我的词典在下面;我在遍历它时遇到错误。
mk = {'Incident': {'AlertStatus': 'SLA BREACH',
'Area': 'Test',
'Assignee': 'Incident.Coordinator',
'AssignmentGroup': 'Operating System Support (North America)',
'Category': 'incident',
'Contact': 'ALSTON, LOU',
'Description': ['Test - Request - 1 , Test - Request - 1, Test - '
'Request - 1Test - Request - 1Test - Request - '
'1Test - Request - 1Test - Request - 1Test - '
'Request - 1Test - Request - 1'],
'Impact': '2',
'IncidentID': 'IM10265',
'OpenTime': '2020-04-09T08:16:16+00:00',
'OpenedBy': 'rf',
'Phase': 'Categorization',
'Service': 'CI1001032',
'Source': '2',
'Status': 'Categorize',
'Subarea': 'Test',
'Title': 'Test - Request - 1',
'UpdatedBy': 'rf',
'UpdatedTime': '2020-04-09T08:16:25+00:00',
'Urgency': '3'},
'Messages': [],
'ReturnCode': 0}
def extract_val():
id_data = []
Assignee_data = []
id_datas = [q['Incident']['IncidentID'] for q in mk]
Assignee_datas = [t['Incident']['Assignee'] for t in mk]
print(id_datas)
print(Assignee_datas)
extract_val()
出现错误:TypeError:字符串索引必须是整数
虽然我使用键 (Incident) 然后使用其他键,如 :(Incident)、(Assignee) 来提取值,但仍然出现错误。请建议我在这里缺少什么
让我们打印出来,您会看到您的问题...
>>> for q in mk:
... print(q)
...
Incident
Messages
ReturnCode
像这样循环遍历 dict,你循环遍历键。
但我想你的问题是你例外地拥有那种字典对象的列表。如果是这样,您的功能将按预期工作。
如果 mk
是字典列表,试试这个。
mk = [{'Incident': {'AlertStatus': 'SLA BR', 'Area': 'Test', 'Assignee': 'Incident.Coordinator','Category': 'incident', 'Contact': 'LU', 'Impact': '2', 'IncidentID': 'IM10265', 'OpenedBy': 'rf', 'Phase': 'OP', 'Service': 'CI102', 'Urgency': '3'}, 'Messages': [], 'ReturnCode': 0}, {'Incident': {'AlertStatus': 'SLA AC', 'Area': 'Test', 'Assignee': 'Cris.Bros', 'AssignGroup': 'FCI', 'Category': 'incident', 'Contact': 'AN', 'Description': ['Test-Request-2'], 'IncidentID': 'IM10266', 'Status': 'WI', 'Subarea': '3', 'Urgency': '1'}, 'Messages': [], 'ReturnCode': 0}]
def extract_val():
id_datas , Assignee_datas = map(list, zip(*[(q['Incident']['IncidentID'], q['Incident']['Assignee']) for q in mk]))
print(id_datas)
print(Assignee_datas)
extract_val()
输出:
['IM10265', 'IM10266']
['Incident.Coordinator', 'Cris.Bros']
在以下代码行中:
id_datas = [q['Incident']['IncidentID'] for q in mk]
您正在遍历字典 mk 的键。你想要做的是遍历项目。这可以使用 dict.items()
方法完成。
尝试以下操作:
id_datas = [q['Incident']['IncidentID'] for q in mk.items()]
编辑:
抱歉,这是一个在我尝试使用您的字典时有效的解决方案。
id_datas = [q[1]['IncidentID'] for q in mk.items() if q[0] == 'Incident']
所以 mk.items() returns 一个元组列表。每个元组的格式为 (key, value)
因此,在我的示例中,q 循环遍历 mk,如果键 q[0] 是 'Incident',它 returns q[1].[=14 返回的字典中的 'IncidentID' 值=]
我的词典在下面;我在遍历它时遇到错误。
mk = {'Incident': {'AlertStatus': 'SLA BREACH',
'Area': 'Test',
'Assignee': 'Incident.Coordinator',
'AssignmentGroup': 'Operating System Support (North America)',
'Category': 'incident',
'Contact': 'ALSTON, LOU',
'Description': ['Test - Request - 1 , Test - Request - 1, Test - '
'Request - 1Test - Request - 1Test - Request - '
'1Test - Request - 1Test - Request - 1Test - '
'Request - 1Test - Request - 1'],
'Impact': '2',
'IncidentID': 'IM10265',
'OpenTime': '2020-04-09T08:16:16+00:00',
'OpenedBy': 'rf',
'Phase': 'Categorization',
'Service': 'CI1001032',
'Source': '2',
'Status': 'Categorize',
'Subarea': 'Test',
'Title': 'Test - Request - 1',
'UpdatedBy': 'rf',
'UpdatedTime': '2020-04-09T08:16:25+00:00',
'Urgency': '3'},
'Messages': [],
'ReturnCode': 0}
def extract_val():
id_data = []
Assignee_data = []
id_datas = [q['Incident']['IncidentID'] for q in mk]
Assignee_datas = [t['Incident']['Assignee'] for t in mk]
print(id_datas)
print(Assignee_datas)
extract_val()
出现错误:TypeError:字符串索引必须是整数
虽然我使用键 (Incident) 然后使用其他键,如 :(Incident)、(Assignee) 来提取值,但仍然出现错误。请建议我在这里缺少什么
让我们打印出来,您会看到您的问题...
>>> for q in mk:
... print(q)
...
Incident
Messages
ReturnCode
像这样循环遍历 dict,你循环遍历键。
但我想你的问题是你例外地拥有那种字典对象的列表。如果是这样,您的功能将按预期工作。
如果 mk
是字典列表,试试这个。
mk = [{'Incident': {'AlertStatus': 'SLA BR', 'Area': 'Test', 'Assignee': 'Incident.Coordinator','Category': 'incident', 'Contact': 'LU', 'Impact': '2', 'IncidentID': 'IM10265', 'OpenedBy': 'rf', 'Phase': 'OP', 'Service': 'CI102', 'Urgency': '3'}, 'Messages': [], 'ReturnCode': 0}, {'Incident': {'AlertStatus': 'SLA AC', 'Area': 'Test', 'Assignee': 'Cris.Bros', 'AssignGroup': 'FCI', 'Category': 'incident', 'Contact': 'AN', 'Description': ['Test-Request-2'], 'IncidentID': 'IM10266', 'Status': 'WI', 'Subarea': '3', 'Urgency': '1'}, 'Messages': [], 'ReturnCode': 0}]
def extract_val():
id_datas , Assignee_datas = map(list, zip(*[(q['Incident']['IncidentID'], q['Incident']['Assignee']) for q in mk]))
print(id_datas)
print(Assignee_datas)
extract_val()
输出:
['IM10265', 'IM10266']
['Incident.Coordinator', 'Cris.Bros']
在以下代码行中:
id_datas = [q['Incident']['IncidentID'] for q in mk]
您正在遍历字典 mk 的键。你想要做的是遍历项目。这可以使用 dict.items()
方法完成。
尝试以下操作:
id_datas = [q['Incident']['IncidentID'] for q in mk.items()]
编辑:
抱歉,这是一个在我尝试使用您的字典时有效的解决方案。
id_datas = [q[1]['IncidentID'] for q in mk.items() if q[0] == 'Incident']
所以 mk.items() returns 一个元组列表。每个元组的格式为 (key, value) 因此,在我的示例中,q 循环遍历 mk,如果键 q[0] 是 'Incident',它 returns q[1].[=14 返回的字典中的 'IncidentID' 值=]