在Python中迭代字典时出错

在Python中迭代字典时出错,python,dictionary,indices,Python,Dictionary,Indices,我的字典在下面;我在迭代时遇到一个错误 mk = {'Incident': {'AlertStatus': 'SLA BREACH', 'Area': 'Test', 'Assignee': 'Incident.Coordinator', 'AssignmentGroup': 'Operating System Support (North America)', 'Category':

我的字典在下面;我在迭代时遇到一个错误

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:字符串索引必须是整数


虽然我先使用key(Incident)来提取值,然后使用其他键(比如:(Incident),(assignment)来提取值,但仍然会出现错误。请建议我在这里缺少的内容

让我们打印出来,您将看到您的问题

>>> for q in mk:
...     print(q)
...
Incident
Messages
ReturnCode
像这样在dict中循环,你在键中循环


但我想你的问题是,你有一个这样的字典对象列表是例外。如果是这样,您的函数将按预期工作。

如果
mk
是DICT列表,请尝试此操作

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()返回元组列表。每个元组的格式为(键、值)
因此,在我的示例中,q通过mk循环,如果键q[0]是“Incident”,它将从q[1]返回的字典中返回“IncidentID”值。

字典中存在语法错误。你注意到了吗?不仅如此,你还遗漏了问题中的缩进。如果您修复了这两个问题,您的代码将显示
['IM10265','IM10266']['Incident.Coordinator','Cris.Bros']
。这就是验证的结果吗?那么,错误点的
q
是什么
print
语句是您的第一个调试工具。是的,这是预期结果:['IM10265','IM10266']['Incident.Coordinator','Cris.Bros']Hi Kormatiraju032,当我尝试使用您的建议时,我得到的输出是:['IM10271']['Cris.Bros'],而我正在尝试构建类似:['IM10265','IM10271']['Incident.Coordinator','Cris.Bros']你在哪本字典上测试这个,你能把它添加到帖子中吗?我会检查这是字典:mk={'Incident':{'AlertStatus':'SLA BR','Area':'Test','Assignment':'Event.Coordinator','Category':'Event','Contact':'LU','Impact':'2','IncidentID':'IM10265','OpenedBy':'rf','Phase':'OP','Service':'CI102','Emergency':'3','Messages':[],'ReturnCode:0}{'Event{'AlertStatus':'SLA AC','Area':'Test','Assignment':'Cris.Bros','AssignGroup':'FCI','Category':'Event','Contact':'AN','Description':['Test-Request-2'],'IncidentID':'IM10266','Status':'WI Subreation':'3','Emergency':'1','Messages':[],'ReturnCode:'0}@OxOdome我得到了预期的输出,可能是您的输入格式错误,请检查我不能在这里发布完整的代码,请建议我如何共享完整的代码,因为这里的空间较少,我也可以在您的示例字典mk=[{……}],而mk im使用的字典是{……},因此可能在您的代码示例中,它被视为列表&可能不起作用!!!嗨,Morne,谢谢您的建议,但当我尝试应用相同的方法时,我得到的错误是:TypeError:元组索引必须是整数或切片,而不是str,我也尝试过这样做,但不确定!!!