我有一个字典,名称作为键,列表包含分数作为值。
我正在尝试对值中的列表进行排序,然后按值对整个字典进行排序 - 使其按最高分排序。
这是字典:
{'Dave_Wright': [10], 'Clara_Johnson': [9, 7], 'Amy_Kukri': [9, 8, 9], 'Eden_Jia': [10]}
我正在尝试使用从stackoverflow的其他位置找到的代码,但我还没有找到特定于此的问题。
print(d2)
d2 = sorted(d2.items(), key = itemgetter(1))
for key in d2:
print(key, d2[key])
我可能会用这种方式从山上开出一座山,但我真的很难过。
答案 0 :(得分:0)
仅itemgetter(1)
不会进行排序。你需要为此编写自己的密钥:
def get_return(key_value):
return list(sorted(key_value[1])), key_value[0]
d2 = sorted(d2.items(), key=get_return, reverse=True)
for key, value in d2:
print(key, value)
推荐的键/值对字典进行排序
答案 1 :(得分:0)
这将按照您指定的顺序打印字典(假设您的意思是最高分):
d = {'Dave_Wright': [10], 'Clara_Johnson': [9, 7], 'Amy_Kukri': [9, 8, 9], 'Eden_Jia': [10]}
print ('\n'.join(
'{}, {}'.format(key, sorted(value, reverse=True))
for key, value in sorted(d.items(), key=lambda x:x[1], reverse=True)))
结果:
Dave_Wright, [10]
Eden_Jia, [10]
Amy_Kukri, [9, 9, 8]
Clara_Johnson, [9, 7]
答案 2 :(得分:0)
字典通常不可排序;虽然你可以对字典中的键值对进行排序。
for name, scores in sorted(d2.items(), key=lambda x: max(x[1]), reverse=True):
print name, sorted(scores) # reverse=True?
答案 3 :(得分:0)
for l in d.values():
l.sort(reverse=True) # this will sort the values in place(mutate the dict)
result = sorted(d.items(), key=lambda x: x[1], reverse=True)
Out[518]:
[('Eden_Jia', [10]),
('Dave_Wright', [10]),
('Amy_Kukri', [9, 9, 8]),
('Clara_Johnson', [9, 7])]
这是您期望的输出吗?