【问题标题】:sort dictionary with one other dictionary用另一本字典排序字典
【发布时间】:2021-05-13 19:26:02
【问题描述】:

假设我有一个 dic,其中键是玩家,值是游戏数量。

dic1 = {player1: 100, 
        player2: 4, 
        player3: 400, 
        player4: 50
       }

现在假设我要对这个 dic 进行排序

dic1_sorted = dict(sorted(dic1.items(), key=lambda item: item[1], reverse=True))

我会得到这个

dic1_sorted = {player3: 400,
               player1: 100,
               player4: 50,
               player2: 4
              }

假设我有一个新的 dic,其中键是玩家,值是胜率。

dic2 = {player1: 1,
        player2: 0.5,
        player3: 0.7,
        player4: 0.2

dic2_sorted = {player3: 0.7,
               player1: 1,
               player4: 0.2,
               player2: 0.5
              }

如何在不使用 panda 之类的东西的情况下尽可能高效地实现 dic2_sorted,它是由 dic1_sorted 排序的?

【问题讨论】:

  • 只需在 lambda 内的其他字典中查找 player

标签: python python-3.x dictionary


【解决方案1】:

在排序时从一个字典中查找密钥,我在这里使用- 来颠倒顺序,但reverse=True 可能更可取(我将您的播放器转换为字符串只是为了说明)

dic1_sorted = {"player3": 400,
               "player1": 100,
               "player4": 50,
               "player2": 4
              }

dic2 = {"player1": 1,
        "player2": 0.5,
        "player3": 0.7,
        "player4": 0.2}

print(sorted(dic2.items(), key = lambda x: -dic1_sorted[x[0]]))
# [('player3', 0.7), ('player1', 1), ('player4', 0.2), ('player2', 0.5)]

【讨论】:

    【解决方案2】:

    您可能想使用OrderedDict

    from collections import OrderedDict
    keyorder = list(dic1_sorted.keys())
    OrderedDict(sorted(dic2.items(), key=lambda i:keyorder.index(i[0])))
    
    OrderedDict([('player3', 0.7),
                 ('player1', 1),
                 ('player4', 0.2),
                 ('player2', 0.5)])
    

    【讨论】:

    • OrdredDict 仅适用于 python 3.5 或更低版本
    猜你喜欢
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    相关资源
    最近更新 更多