gpt4 book ai didi

python - 根据排名重新映射数据

转载 作者:行者123 更新时间:2023-12-01 01:28:17 26 4
gpt4 key购买 nike

我有以下内容:

d = {"a":3,"b":2,"c":3,"d":2,"e":2,"f":3,"g":4, "h":6}

m = {v: i+1 for i,v in enumerate(sorted(set(d.values()),reverse=True))}
r = {k:m[d[k]] for k in d}

其中r是:

{'a': 3, 'd': 4, 'b': 4, 'c': 3, 'e': 4, 'f': 3, 'g': 2, 'h': 1}

因此“h”在 d 中具有最高值 6,因此在 r 中它被重新映射为 1。然后“g”排名第 2,因为它具有下一个最高值,即 d 中的 4。

我的解决方案工作正常,但我想知道是否有更优雅的解决方案。

最佳答案

Python 字典不保持顺序。如果您愿意,您需要一个 OrderedDict

使用Counter来获取排名。然后将其转换为元组列表或 OrderedDict

from collections import Counter, OrderedDict

d = {"a":3,"b":2,"c":3,"d":2,"e":2,"f":3,"g":4, "h":6}
c = Counter(d)

# if you want a list of tuples
ranked_list = [(pair[0],rank+1) for rank,pair in enumerate(c.most_common())]
# [('h', 1),('g', 2),('f', 3),('a', 4),('c', 5),('b', 6),('d', 7), ('e', 8)]

# if you want a dict:
ranked_dict = OrderedDict(ranked_list)
# OrderedDict([('h', 1),('g', 2),('f', 3),('a', 4),('c', 5),('b', 6),('d', 7), ('e', 8)])

关于python - 根据排名重新映射数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53145066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com