嵌套字典
删除列表项我有一个嵌套的字典,看起来像这样:嵌套字典
{'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为我需要删除的事件。
例如要让它为你更加清晰,可以说,我想与EVENTID 3215删除事件那么我将不得不这些信息能够删除:
"Div 4 A Herrar", 1, 3215'
如果某样东西不清楚请问,我会更新我的问题更具体。
EDIT1
这就是我只能想到这样做的:
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.
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"]
,它包括当前event
字典只有在event
的eventID
是不一样的,你传递给函数的一个。
你知不知道这个更快还是taesu提供的答案 – 2015-03-02 15:44:57
@TimoCengiz用LC创建一个列表发生在C代码内部。所以,我打赌只会在这个代码上。 – thefourtheye 2015-03-02 15:45:56
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
我认为你需要在for循环之前定义lst,因为可能有多于1个事件,这意味着每当它循环时lst将是空的@taesu – 2015-03-02 15:43:28
ops,你是对的 – taesu 2015-03-02 15:44:08
我喜欢这个代码,它的工作原理是我会把最正确的答案提交给最快的人。感谢您的时间 – 2015-03-02 15:47:04
您的字典样本已满错误;它不能被粘贴回Python会话中。 – 2015-03-02 15:11:00
为什么你会说当它明显为我工作时它充满了错误?我所做的就是剪掉我更大的词典中的一部分,使它更具可读性,所以我唯一可能忘记的是在最后删除一些括号? @MartijnPieters – 2015-03-02 15:14:31
不要这么饿,投票下来的家伙。这是一个很好的问题,我不知道问题是什么 – 2015-03-02 15:16:09