2016-08-22 74 views
1

如何排序存儲爲字典的python中的鄰接列表?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)] 

我希望每行按浮點數排序。

這是值是如何添加,但有一個循環,並從標準輸入手動而不是讀:

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

我明白我必須使用排序(),我已經試過這樣的東西:

sorted(adjList) 

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

value for (key, value) in sorted(adjList[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

這裏有一個工作示例:

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 
1

可以使用list.sort()具有關鍵作用。既然你想每個元組的第二個元素進行排序,關鍵功能必須從每個元組的第二個項目(以下t[1]),t

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

list.sort()將排序列表中沒有適當的變量重新綁定是需要。