此外,如果原始字典只有一个值,则其得分为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]})