在Python中遍历字典时出错

问题描述 投票:-1回答:3

我的字典在下面;遍历它时出现错误。

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

尽管我正在使用(事件)键,然后再使用:(事件),(受让人)之类的其他键来提取值,但仍然会出错。请在这里建议我所缺少的内容

python dictionary indices
3个回答
0
投票

让我们打印,您会看到您的问题...

>>> for q in mk:
...     print(q)
...
Incident
Messages
ReturnCode

像这样遍历字典,就遍历键。

但是我想您的问题是,您除了拥有此类字典对象的列表之外。如果是这样,您的功能将按预期工作。


0
投票

在以下代码行中:

id_datas = [q ['Incident'] ['IncidentID'] for q in mk]

您正在遍历字典mk的键。您想要做的就是遍历所有项目。这可以使用dict.items()方法完成。

尝试以下操作:

id_datas = [q ['Incident'] ['IncidentID'] for m in k.items()]


0
投票

尝试一下:

def extract_val():
    id_datas , Assignee_datas =  map(list, zip(*[(mk[q]['IncidentID'], mk[q]['Assignee']) for q in mk if q == 'Incident']))
    print(id_datas)
    print(Assignee_datas)

输出:

['IM10265']
['Incident.Coordinator']

如果mk是字典列表,请尝试此。

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)

输出:

['IM10265', 'IM10266']
['Incident.Coordinator', 'Incident']
© www.soinside.com 2019 - 2024. All rights reserved.