如何按值对多级词典进行排序?

时间:2018-09-05 06:10:39

标签: python dictionary

我只是想按玩家得分的跑步次数对这个指标进行排序,但我不知道该怎么做。

orangecap({'test1':{'Ashwin':84, 'Kohli':120}, 'test2':{'ashwin':59, 'Pujara':42}})

这里“ orangecap”是要调用的函数的定义,我想返回得分最高的人的名字(在本例中为Kohli)。

可以在不使用外部库的情况下完成此操作吗?

2 个答案:

答案 0 :(得分:2)

设置

dict_of_dicts = {
    'test1': {'Ashwin' :84, 'Kohli': 120}, 
    'test2': {'ashwin': 59, 'Pujara': 42}, 
    'test3': {'Pandas': 120, 'R': 119}
}

解决方案

似乎您有一个dict的dict(不是列表)。您需要遍历列表中的每个值,并查看它是否大于最大值(最初设置为None,以及播放器的名称和第一个键,例如test1test2等)。如果是这样,请将其值重置为新的最大值,然后将玩家名称和键追加到持有获得最大值的玩家的列表中(以考虑平局,例如Kohli&Pandas)。

def orangecap(dict_of_dicts):
    max_key_name = []
    max_score = None
    for key in dict_of_dicts:
        for name, score in dict_of_dicts[key].iteritems():  # .items() in Python 3.
            if score > max_score:
                max_key_name = [(key, name)]
                max_score = score
            elif score == max_score:
                max_key_name.append((key, name))
    return max_key_name, max_score

>>> orangecap(dict_of_dicts=dict_of_dicts)
([('test1', 'Kohli'), ('test3', 'Pandas')], 120)

答案 1 :(得分:0)

一个非常简单的解决方案是迭代dict的dict,使用两个变量来存储跑步和选手,就像这样-

def orangecap(your_dict):
    max_runs = 0
    player_scored = ''

    for match, stats in your_dict.items():
        for player, runs in stats.items():
            if runs > max_runs:
                max_runs = runs
                player_scored = player
    return player_scored