gpt4 book ai didi

python - Python 中的位置排名和关系处理

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

(我很抱歉这个问题的之前版本显示了我需要修复的错误函数,这个问题已经被修复,我希望这个问题现在更有意义了。)

我有一个带有分数的对象列表,我试图根据这些分数为它们分配等级。以下是我输出数据的基本方式。

sorted_scores = [
('Apolo Ohno', 0),
('Shanie Davis', -1),
('Bodie Miller', -2),
('Lindsay Vohn', -3),
('Shawn White', -3),
('Bryan Veloso', -4)
]

我有一条领带。现在,现在为上面的对象分配位置的函数是一个简单的 for 循环,它只分配 i 的值。作为对象的最终位置。

positions = {}

i = 1
for key, value in sorted_list:
# Since in my codebase the strings are IDs, I use the key to fetch the object.
if value is not None:
positions[key] = i
i += 1

所以这显然会返回:

positions = {
'Apolo Ohno': 1,
'Shanie Davis': 2,
'Bodie Miller': 3,
'Lindsay Vohn': 4,
'Shawn White': 5,
'Bryan Veloso': 6
}

希望这是有道理的。问题的核心是那个循环。更有意义的是,如果它像这样返回它们:

positions = {
'Apolo Ohno': 1,
'Shanie Davis': 2,
'Bodie Miller': 3,
'Lindsay Vohn': 4, # Same value.
'Shawn White': 4, # Same value.
'Bryan Veloso': 6
}

我将如何编辑上面的函数来做到这一点,请记住,我可以在任何给定时间拥有任意数量的联系,具体取决于我有多少成员对所述对象进行排名?最高等级应为 1,因此可以显示为:<rank>/<total # of people>

提前致谢。 :)

最佳答案

>>> sorted_scores = [
... ('Apolo Ohno', 0),
... ('Shanie Davis', -1),
... ('Bodie Miller', -2),
... ('Lindsay Vohn', -3),
... ('Shawn White', -3),
... ('Bryan Veloso',-4)
... ]
>>>
>>> res = {}
>>> prev = None
>>> for i,(k,v) in enumerate(sorted_scores):
... if v!=prev:
... place,prev = i+1,v
... res[k] = place
...
>>> print res
{'Apolo Ohno': 1, 'Bryan Veloso': 6, 'Shanie Davis': 2, 'Lindsay Vohn': 4, 'Bodie Miller': 3, 'Shawn White': 4}

请记住,dict 是无序的,因此要按位置顺序迭代,您需要这样做

>>> from operator import itemgetter
>>> print sorted(res.items(),key=itemgetter(1))
[('Apolo Ohno', 1), ('Shanie Davis', 2), ('Bodie Miller', 3), ('Lindsay Vohn', 4), ('Shawn White', 4), ('Bryan Veloso', 6)]

关于python - Python 中的位置排名和关系处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2299696/

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