加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何索引到词典列表?

发布时间: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'})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读