Python从有序的字典中获取密钥

时间:2017-02-02 16:45:19

标签: python python-3.x dictionary key

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]

所以提前感谢并为代码量道歉!

2 个答案:

答案 0 :(得分:1)

您正在对由dict的items方法返回的元组的可迭代进行排序,因此排序列表中的每个项目都是包含该英雄及其分数的元组。

您可以完全避免使用sorteddict.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])}