删除嵌套词典中的列表项

2024-05-13 21:46:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个嵌套字典,看起来像这样:

{'Div 4 A Herrar': {'0': {'awayScore': '0',
                          'awayTeam': 'Floda BoIF',
                          'events': [],
                          'homeScore': '0',
                          'homeTeam': 'SKIF Semberijaaaah',
                          'tempTime': '10:00',
                          'time': 'FT'},
                    '1': {'awayScore': '0',
                          'awayTeam': 'Kode IF',
                          'events': [{'eventID': '3215',
                                      'eventScore': '1-0',
                                      'eventTime': 'HT',
                                      'eventType': 'Goal-timocin',
                                      'name': 'timocin',
                                      'selectedTeam': 'homeTeam'},
                                     {'eventID': '2312',
                                      'eventScore': '2-0',
                                      'eventTime': 'HT',
                                      'eventType': 'Goal-timocin',
                                      'name': 'timocin',
                                      'selectedTeam': 'homeTeam'}],
                          'homeScore': '2',
                          'homeTeam': 'Partille IF FK',
                          'tempTime': '11:00',
                          'time': 'FT'},
                    '2': {'awayScore': '0',
                          'awayTeam': 'Romelanda UF',
                          'events': [],
                          'homeScore': '0',
                          'homeTeam': 'IK Kongah\\u00e4lla',
                          'tempTime': '12:00',
                          'time': 'FT'}}}

我想做的是删除事件列表中的特定事件。我事先知道的是前两个键的含义:

"Div 4 A Herrar" and the integer number that represents a dictionary item

对于需要删除的事件,我还有eventID。你知道吗

例如,为了让您更清楚,让我们假设我想要删除一个EventID3215的事件。然后我就可以删除这些信息:

"Div 4 A Herrar", 1, 3215'

如果有什么不清楚,请一定要问,我会更新我的问题,以更具体。你知道吗

编辑1

我只能这样想:

for event in dict["Div 4 A Herrar"][1]["events"]:
    if(event["eventID"] == "3215"):
        # this is where i got stuck since i had no idea how to proceed from here. 

Tags: diviftime事件eventsfteventidhometeam
2条回答
def remove_event(d,d_id,key,event_id):
    # d = dictionary 
    # d_id = 'Div 4 A Herrar'
    # key = '1'
    # event_id = '3215'

    # create temp list
    lst = []
    # loop the events list
    for event in d[d_id][key]['events']:
        # if event_id does not match
        if event['eventID'] != event_id:
            # append to temp list
            lst.append(event)
    # make that temp list the events list
    d[d_id][key]['events'] = lst
def remove_event(dicts, key, id, event_id):
    if key in dicts and id in dicts[key] and "events" in dicts[key][id]:
        dicts[key][id]['events'] = [event for event in dicts[key][id]['events']
                                    if event["eventID"] != event_id]
    else:
        raise ValueError("The actual Events could not be found")

remove_event(data, "Div 4 A Herrar", "1", "3215")

只需使用列表理解从events列表中过滤事件,如上面的函数所示。关键是

[event for event in dicts[key][id]["events"] if event["eventID"] != event_id]

它通过迭代dicts[key][id]["events"]创建一个新列表,并且仅当eventeventID与传递给函数的event不同时,它才包含当前的event字典。你知道吗

相关问题 更多 >