如何在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])
答案 0 :(得分:4)
sorted
返回给定可迭代的新排序列表。如果您想就地排序,请使用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
。
答案 1 :(得分:1)
这是一个有效的例子:
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
答案 2 :(得分:1)
您可以将list.sort()
与关键功能结合使用。由于您希望按每个元组的第二个元素进行排序,因此键函数必须从每个元组t[1]
中选择第二个项(t
):
for key in adjList:
d[key].sort(key=lambda t: t[1])
list.sort()
将对列表进行排序,不需要重新绑定变量。