Python排序JSON,其中key是用户定义的变量

时间:2017-05-15 00:31:03

标签: python json sorting

假设我有一个看起来像这样的json(文件)

[
  {
    "id": 300,
    "name": "B"
  },
  {
    "id": 400,
    "name": "C"
  },
  {
    "id": 200,
    "name": "A"
  }
]

解析id获取

for i in file
   id = (int) (i['id'])

#Now I define a variable (difference, which is id-200)
   difference = id - 200

我想根据用户定义的变量差异(从最低到最高)对此JSON进行排序。因此,在排序时,它将如下所示:

[
  {
    "id": 200,
    "name": "A"
  },
  {
    "id": 300,
    "name": "B"
  },
  {
    "id": 400,
    "name": "C"
  }
]

如何在排序时使用用户定义的差异变量作为键?

2 个答案:

答案 0 :(得分:1)

要按照词典列表中的键进行排序,您可以执行以下操作:

<强>代码:

sorted(data, key=lambda x: x['id'])

测试代码:

data = [
    {"id": 300, "name": "B"},
    {"id": 400, "name": "C"},
    {"id": 200, "name": "A"}
]

print(sorted(data, key=lambda x: x['id']))

<强>结果:

[{'id': 200, 'name': 'A'}, {'id': 300, 'name': 'B'}, {'id': 400, 'name': 'C'}]

通过任意函数排序:

可以将一个变量的任何函数传递给类似:

的排序
def user_sort_order(record):
    return record['id'] * -1

print(sorted(data, key=user_sort_order))

<强>结果:

[{'id': 400, 'name': 'C'}, {'id': 300, 'name': 'B'}, {'id': 200, 'name': 'A'}]

答案 1 :(得分:0)

不是100%确定差异变量应该做什么,但你可以这样排序:

            string aLastName = fileName.Substring(fileName.LastIndexOf(".") + 1,
            (fileName.Length - fileName.LastIndexOf(".") - 1)); 
        if (aLastName.ToLower() == "docx")
        {
            WordprocessingDocument doc = WordprocessingDocument.Open(fileName, false);
            string strText = doc.MainDocumentPart.Document.InnerText;

            return GetMD5HashFromStream(String2Stream(strText));
        }

也许用sorted(data, key=lambda x: x['id'] - 200) 围绕它,差异可以是负数:

abs

顺便说一句,除非您的ID小于200,且“差异”可能为负,否则这与使用ID数值排序(如果我已正确理解您想要的内容)相同。 / p>