对 python 字典中的键值对列表进行排序

Sort list of key value pairs in python dictionary

如何对存储为字典的 python 中的邻接表进行排序?

Adjacency List:
0: [(7, 0.16), (4, 0.38), (2, 0.26), (6, 0.58)]
1: [(5, 0.32), (7, 0.19), (2, 0.36), (3, 0.29)]
2: [(3, 0.17), (0, 0.26), (1, 0.36), (7, 0.34), (6, 0.4)]
3: [(2, 0.17), (1, 0.29), (6, 0.52)]
4: [(5, 0.35), (7, 0.37), (0, 0.38), (6, 0.93)]
5: [(4, 0.35), (7, 0.28), (1, 0.32)]
6: [(2, 0.4), (3, 0.52), (0, 0.58), (4, 0.93)]
7: [(4, 0.37), (5, 0.28), (0, 0.16), (1, 0.19), (2, 0.34)]

我希望每行按浮点数排序。

这是添加值的方式,但使用循环并从 stdin 读取而不是手​​动读取:

adjList = defaultdict(list)
adjList[0].append((7, 0.16))

我知道我必须使用 sorted() 并且我尝试过这样的事情:

sorted(adjList)

for i in adjList:
sorted(adjList[i])

value for (key, value) in sorted(adjList[0])

sorted returns a new sorted list given an iterable. If you want to sort in-place, use list.sort():

from operator import itemgetter
for k in adjList:
    adjList[k].sort(key=itemgetter(1))

key=itemgetter(1) 确保它在元组的第二个元素上排序,或者你也可以写 key=lambda x: x[1].

如果您想按降序排序,请使用 key=itemgetter(1), reverse=True

这是一个工作示例:

my_dict = {
    0: [(7, 0.16), (4, 0.38), (2, 0.26), (6, 0.58)],
    1: [(5, 0.32), (7, 0.19), (2, 0.36), (3, 0.29)],
    2: [(3, 0.17), (0, 0.26), (1, 0.36), (7, 0.34), (6, 0.4)],
    3: [(2, 0.17), (1, 0.29), (6, 0.52)],
    4: [(5, 0.35), (7, 0.37), (0, 0.38), (6, 0.93)],
    5: [(4, 0.35), (7, 0.28), (1, 0.32)],
    6: [(2, 0.4), (3, 0.52), (0, 0.58), (4, 0.93)],
    7: [(4, 0.37), (5, 0.28), (0, 0.16), (1, 0.19), (2, 0.34)]
}

out = {k: sorted(v, key=lambda x: x[1]) for k, v in my_dict.iteritems()}
print out

您可以将 list.sort() 与按键功能一起使用。因为你想按每个元组的第二个元素排序,关键函数必须select每个元组的第二个项目(下面的t[1]),t:

for key in adjList:
    d[key].sort(key=lambda t: t[1])

list.sort() 将对列表进行排序,不需要重新绑定变量。