gpt4 book ai didi

python对值列表进行排名,使用非唯一值的平均排名

转载 作者:太空宇宙 更新时间:2023-11-03 13:48:49 24 4
gpt4 key购买 nike

是否有更 pythonic 的、更快的想要按值对字典进行排名并对非唯一值进行平均排名。我的做法:

d = {'a':5,'b':5,'c':5,'d':1,'e':6}
ordered_keys = sorted(d, key=d.get)
ordered_v = [d[k] for k in ordered_keys]
value_rank = [(ordered_v.index(v)+1)+(ordered_v.count(v)-1)/2 for v in ordered_v]
ranked_key_list = zip(ordered_keys,value_rank)
[('d', 1), ('a', 3), ('c', 3), ('b', 3), ('e', 5)]

这个关于排序字典的广泛讨论非常有帮助:python dictionary values sorting

最佳答案

你算法的瓶颈是 .index 和 .count 是 O(n),因此你的瓶颈是这一行:

value_rank = [(ordered_v.index(v)+1)+(ordered_v.count(v)-1)/2 for v in ordered_v]

使你的整体性能为 O(n^2)

我已经为你做了一个 O(n*log(n)) 算法(瓶颈现在是排序):

import collections

d = {'a':5,'b':5,'c':5,'d':1,'e':6}
my_d = collections.defaultdict(list)
for key, val in d.items():
my_d[val].append(key)

ranked_key_list = []
n = v = 1
for _, my_list in sorted(my_d.items()):
v = n + (len(my_list)-1)/2
for e in my_list:
n += 1
ranked_key_list.append((e, v))

关于python对值列表进行排名,使用非唯一值的平均排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770523/

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