如何索引到词典列表?
发布时间:2020-12-20 12:14:15 所属栏目:Python 来源:网络整理
导读:新手警报 – 但现在已经花了几个小时在这个,只是无法搞清楚 – 我有这个清单: players = [{'name': 'John','points': '27','Played': '6'},{'name': 'Emil','points': '43','Played' : '13'},{'name': 'Susan','points': '11','Played': '2'},{'name': 'Pet
新手警报 – 但现在已经花了几个小时在这个,只是无法搞清楚 – 我有这个清单:
players = [{'name': 'John','points': '27','Played': '6'},{'name': 'Emil','points': '43','Played' : '13'},{'name': 'Susan','points': '11','Played': '2'},{'name': 'Peter','points': '4','Played': '3'}] 我想做的是能够说: players["John"]["score"]=newScore players["john"]["Played"] = players["john"]["Played"]+1 此列表表示对象列表,其中名称是主键,然后是每个对象的theres参数. 但是当然不起作用,我能够通过以下方式触摸元素: print (players[0]["score"]) 然后这将打印出Johns得分好,但是通过这种方式,我需要通过所有玩家[x]首先比较一下,如果名字是相同的,然后我可以访问它,它对我来说似乎不是那么Python. 你会怎样以pythonic方式进行此操作? 解决方法
您可以使用可以提供指定的专用更新方法的类来包装当前数据,而不必更改原始数据的整个结构:
class Row: def __init__(self,row): self.row = row def __setitem__(self,_t,_val): self.row[_t] = str(_val) def __getitem__(self,_stat): return int(self.row[_stat]) def __repr__(self): return '{}({})'.format(self.__class__.__name__,str(self.row)) class Players: def __init__(self,data={}): self.data = {i['name']:Row(i) for i in data} def __getitem__(self,name): return self.data[name] def __setitem__(self,_name,_data): self.data[_name] = Row(_data) def __repr__(self): return '{}({})'.format(self.__class__.__name__,str(self.data)) players = [{'points': '27','name': 'John',{'points': '43','name': 'Emil','Played': '13'},{'points': '11','name': 'Susan',{'points': '4','name': 'Peter','Played': '3'}] d = Players(players) d['John']['points'] = 30 d["John"]["Played"] = d["John"]["Played"]+1 print(d['John']) d['Bob'] = {'points': '2','Played': '5'} 输出: Row({'points': '30','Played': '7'}) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |