Python的订购字典值
问题描述:
我从一个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
降序排列。我看着Sorted
与Reverse=True
,但我无法得到它的工作。
任何指针?
答
您可以使用键值“更改”的值(列表)进行排序。
我的猜测是你打电话排序完整的字典当前,这就是为什么它不起作用。
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}]
你也可以使用'的.sort的开销做掉()'没有创建新列表的开销。 – 2015-02-11 10:55:20
@AndreaCorbellini谢谢,更新了答案。 – 2015-02-11 10:59:06
谢谢,我想我错了基于索引的键在拉姆达 – Jon 2015-02-11 11:27:38