python noob here。所以我正在创建一个程序,它将从URL中获取JSON文件并解析信息并将其放入数据库中。谢天谢地,我有JSON工作,但现在我被卡住了,我将通过我的代码解释它。
playerDict = {
"zenyatta" : 0,
"mei" : 0,
"tracer" : 0,
"soldier76" : 0,
"ana" : 0,
...}
所以这是我原来的字典,然后填写每个英雄的玩家数据。
topHeroes = sorted(playerDict.items(),key = operator.itemgetter(1),reverse = True)
然后我对这个列表进行排序,它会让英雄们以最先播放的小时数完成比赛。
topHeroesDict = topHeroes[0:3]
playerDict['tophero'] = topHeroesDict[0]
然后我获得前三位英雄。这里的第二行打印出如下列表:
'secondhero': ('mercy', 6.0)
我希望输出为:
'secondhero': 'mercy'
感谢任何帮助,我已经尝试过以下代码,无论有没有列表。
list(topHeroes.keys())[0]
所以提前感谢并为代码量道歉!
答案 0 :(得分:1)
您正在对由dict的items
方法返回的元组的可迭代进行排序,因此排序列表中的每个项目都是包含该英雄及其分数的元组。
您可以完全避免使用sorted
和dict.items
并通过简单地使用collections.Counter
然后获得most_common
3个英雄来获得领先英雄(没有他们的分数)。< / p>
from collections import Counter
player_dict = Counter(playerDict)
leading_heroes = [hero for hero, _ in player_dict.most_common(3)]
答案 1 :(得分:1)
你可以采用枚举的方法,而不是&#34; firsthero&#34;你没关系&#34; Top 1&#34;等等。使用枚举,您可以遍历列表并跟踪当前索引,该索引用于命名此词典理解中的键。 j [0]是英雄的名字,它是元组的第一个元素。
topHeroes = sorted(playerDict.items(),key = operator.itemgetter(1),reverse = True)
topHeroesDict = {"Top "+str(i): j[0] for i, j in enumerate(topHeroes[0:3])}
或者,您可以使用将索引映射到第一个的字典,如下所示:
topHeroes = sorted(playerDict.items(),key = operator.itemgetter(1),reverse = True)
top = {0: "first", 1: "second", 2: "third"}
topHeroesDict = {top[i]+"hero": j[0] for i, j in enumerate(topHeroes[0:3])}
您无需任何导入即可实现此目的。如果没有itemgetter,你可以在一行中这样做:
top = {0: "first", 1: "second", 2: "third"}
topHeroesDict = {top[i]+"hero": j[0] for i, j in enumerate(sorted([(i, playerDict[i]) for i in playerDict.keys()], key = lambda x: x[1], reverse = True)[0:3])}