在 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' 值=]