将字典的字符串列表值转换为排名整数,但其排名为+1并降序



此外,如果原始字典只有一个值,则其得分为1。例如,一个看起来像这样的dict:

{
'q1': ['d184', 'd29', 'd879', 'd880'],
'q2': ['d12', 'd15', 'd658'],
'q3': ['d10']
}

将变成以下内容:

{
'q1': [5, 4, 3, 2],
'q2': [4, 3, 2],
'q3': [1] 
}

这是一个有2个键的字典的开始,不包括1值的情况:

dct = {
'q1': ['d184', 'd29', 'd879', 'd880'],
'q2': ['d12', 'd15', 'd658'] 
}
new_dict = {}
new_values = []
for key in dct.keys():
length = len(dct[key])
values = []
for num in range(length+2):
values.append(num)
sort_ed = sorted(values, key=int, reverse=True)[:-2]
new_values.append(sort_ed)
print(new_values)
[[5, 4, 3, 2], [4, 3, 2]]

这就是我想要的值,现在我只需要将新字典的键设置为原始字典的键,并从new_values分配值。

这里有一个解决方案,使用range对元素进行排序

from collections import defaultdict
d = {
'q1': ['d184', 'd29', 'd879', 'd880'],
'q2': ['d12', 'd15', 'd658'],
'q3': ['d10']
}
ranks_ = defaultdict(list)
for k, v in d.items():
rank_inc = bool(len(v) > 1)  # If length of list is > 1 decrement by 1
for i in range(len(v), 0, -1):
ranks_[k].append(i + rank_inc)
print(ranks_)

defaultdict(<class 'list'>, {'q1': [5, 4, 3, 2], 'q2': [4, 3, 2], 'q3': [1]})

最新更新