Python排序值列表,然后按值

时间:2016-04-07 16:39:21

标签: python dictionary

我有一个字典,名称作为键,列表包含分数作为值。

我正在尝试对值中的列表进行排序,然后按值对整个字典进行排序 - 使其按最高分排序。

这是字典:

{'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])

我可能会用这种方式从山上开出一座山,但我真的很难过。

4 个答案:

答案 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)

Here是一个有用的教程,可按spectre-d

推荐的键/值对字典进行排序

答案 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])]

这是您期望的输出吗?