Python 在嵌套字典的值中查找值的总和
这是一个基于嵌套字典的问题 我们得到了一个嵌套字典,其中在外部字典中,提到了匹配项的名称,匹配项的值是另一个字典,分别带有键和值,函数名是Python 在嵌套字典的值中查找值的总和,python,dictionary,Python,Dictionary,这是一个基于嵌套字典的问题 我们得到了一个嵌套字典,其中在外部字典中,提到了匹配项的名称,匹配项的值是另一个字典,分别带有键和值,函数名是orangecap(d),它接受以下格式的字典 这是样品 d = {'match1':{'player1':57, 'player2':38}, 'match2':{'player3':9, 'player1':42}, 'match3':{'player2':41, 'player4':63, 'player3':91}} 所以我想通过player键进行搜
orangecap(d)
,它接受以下格式的字典
这是样品
d = {'match1':{'player1':57, 'player2':38}, 'match2':{'player3':9, 'player1':42}, 'match3':{'player2':41, 'player4':63, 'player3':91}}
所以我想通过player键进行搜索,计算每个player的总和,并返回最大的总和
因此,输出需要是('player3',100)
这是我迄今为止尝试过的,但没有任何效果:
def orangecap(d):
total=0
for key,value in d.items():
for value in d.items():
if d[key] in d.keys():
total = total+d[value]
return(d[key],max(total))
像这样的方法应该会奏效:
def orangecap(d):
players = {}
for match, scores in d.iteritems():
for player, score in scores.iteritems():
if player not in players:
players[player] = score
else:
players[player] += score
return sorted(players.items(), key=lambda x: x[1])[-1]
这将创建一个包含玩家总分的字典(
players
)。然后,它使用分数对字典中的项目进行排序,并返回最高值。下面是一个可能的解决方案:
from collections import defaultdict
data = {
'match1': {'player1': 57, 'player2': 38},
'match2': {'player3': 9, 'player1': 42},
'match3': {'player2': 41, 'player4': 63, 'player3': 91}
}
def orangecap(d):
result = defaultdict(int)
for k, v in data.items():
for k1, v1 in v.items():
result[k1] += v1
return sorted(result.items(), key=lambda x: x[1])[-1]
print(orangecap(data))
这是从先前的答案中略作修改的答案
def find_totals(d):
total = {}
for match, results in d.items():
for player, score in results.items():
total[player] = total.get(player, 0) + score
highest_score = max(total, key=total.get)
return highest_score, total[highest_score]
样本输出:
>>> d = {'match1':{'player1':57, 'player2':38}, 'match2':{'player3':9, 'player1':42}, 'match3':{'player2':41, 'player4':63, 'player3':91}}
>>> print find_totals(d)
('player3', 100)
那么,您的代码是怎么回事?让我们检查一下算法: 首先,遍历
d
的项(键/值)。这很好,因为您正在尝试遍历嵌套字典结构。但是,不是使用第二个for
循环遍历最内部的结构(迭代值,而不是d
),而是再次遍历d
value
现在只是存储在d
中的键/值的元组,而不是嵌套字典d[key]
只是映射到匹配键的值。那么,如果条件的计算结果从未达到true
,那么值怎么可能出现在键列表中->d.keys()
您的。尽管如此,在两次迭代之后,您将整个迭代短路到return
语句。它既不返回正确的播放机(d[key]
是嵌套的字典),也不接受iterable参数,而不是int
您应该了解有关基本控制流、数据结构和算法设计的更多信息。我认为谷歌很优秀。因为必须有人来做。。。这是一条单行线
编辑:不再是一句台词,因为我意识到球员也应该被归还。现在它是一个函数中的一行
def total_score(*, match_results: dict, player_name: str):
return player_name, sum(score for player_scores in match_results.values()
for player, score in player_scores.items()
if player == player_name)
您能告诉我我的代码哪里出了问题吗?@DhruvMarwha,如果您认为我已经回答了您的问题,请随意标记为已回答。您可以使用defaultdict(int)
将默认值设置为0,而不是lambda:)