Python命令字典值

时间:2015-02-11 10:45:24

标签: 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,但我无法让它工作。

任何指针?

1 个答案:

答案 0 :(得分:3)

您可以使用按值(列表)对键进行排序"更改"。

我的猜测是你现在打电话给整个dict排序,这就是为什么它不起作用。

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}]