2015-02-11 92 views
1

我從一個Web請求這樣的響應:Python的訂購字典值

{'Changes': [{'StartColumn': 34, 'StartLine': 8, 'EndLine': 8, 'NewText': '\n  ', 'EndColumn': 34}, {'StartColumn': 13, 'StartLine': 9, 'EndLine': 9, 'NewText': '', 'EndColumn': 17}, {'StartColumn': 13, 'StartLine': 10, 'EndLine': 10, 'NewText': '', 'EndColumn': 17}]} 

在我的Python字典,我通過data['Changes']可以訪問的價值和可循環的每個項目。

我想要做的是命令Changes的值由EndLine降序排列。我看着SortedReverse=True,但我無法得到它的工作。

任何指針?

回答

3

您可以使用鍵值「更改」的值(列表)進行排序。

我的猜測是你打電話排序完整的字典當前,這就是爲什麼它不起作用。

In [1]: d = {'Changes': [{'StartColumn': 34, 'StartLine': 8, 'EndLine': 8, 'NewText': '\n  ', 'EndColumn': 34}, {'StartColumn': 13, 'StartLine': 9, 'EndLine': 9, 'NewText': '', 'EndColumn': 17}, {'StartColumn': 13, 'StartLine': 10, 'EndLine': 10, 'NewText': '', 'EndColumn': 17}]} 

In [2]: d["Changes"] = sorted(d["Changes"], key= lambda x: x["EndLine"], reverse=True) 

In [3]: d["Changes"] 
Out[3]: 
[{'EndColumn': 17, 
    'EndLine': 10, 
    'NewText': '', 
    'StartColumn': 13, 
    'StartLine': 10}, 
{'EndColumn': 17, 
    'EndLine': 9, 
    'NewText': '', 
    'StartColumn': 13, 
    'StartLine': 9}, 
{'EndColumn': 34, 
    'EndLine': 8, 
    'NewText': '\n  ', 
    'StartColumn': 34, 
    'StartLine': 8}] 

由於@Andrea指出,在這種情況下,我們可以使用.sort()做到這一點的地方,並與創建新的列表

In [4]: d = {'Changes': [{'StartColumn': 34, 'StartLine': 8, 'EndLine': 8, 'NewText': '\n  ', 'EndColumn': 34}, {'StartColumn': 13, 'StartLine': 9, 'EndLine': 9, 'NewText': '', 'EndColumn': 17}, {'StartColumn': 13, 'StartLine': 10, 'EndLine': 10, 'NewText': '', 'EndColumn': 17}]} 

In [5]: d["Changes"].sort(key=lambda x: x["EndLine"], reverse=True) 

In [6]: d["Changes"] 
Out[6]: 
[{'EndColumn': 17, 
    'EndLine': 10, 
    'NewText': '', 
    'StartColumn': 13, 
    'StartLine': 10}, 
{'EndColumn': 17, 
    'EndLine': 9, 
    'NewText': '', 
    'StartColumn': 13, 
    'StartLine': 9}, 
{'EndColumn': 34, 
    'EndLine': 8, 
    'NewText': '\n  ', 
    'StartColumn': 34, 
    'StartLine': 8}] 
+1

你也可以使用'的.sort的開銷做掉()'沒有創建新列表的開銷。 – 2015-02-11 10:55:20

+0

@AndreaCorbellini謝謝,更新了答案。 – 2015-02-11 10:59:06

+0

謝謝,我想我錯了基於索引的鍵在拉姆達 – Jon 2015-02-11 11:27:38