Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成以JSON作为输入的已排序嵌套字典_Python_Json - Fatal编程技术网

Python 生成以JSON作为输入的已排序嵌套字典

Python 生成以JSON作为输入的已排序嵌套字典,python,json,Python,Json,这是有效载荷 payload = ''' { "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": [ { "ID": "ABCD", "SortAs": "SGML",

这是有效载荷

     payload = '''
{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": [
                {
                    "ID": "ABCD",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                },
                {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                },
                {
                    "ID": "PQRS",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                },
                {
                    "ID": "ABRA",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            ]
        }
    }
}

'''

将上面的这个json字符串作为输入并打印输出json,其中GlossList被排序(按ID排序)

首先,您提供的json无效。我已经编辑了你的答案,提供了一个有效的答案

回答你的问题:

  • 您必须使用
    ast.literal\u eval()
    将字符串转换为字典
  • 你可以申请:

    2.1
    sorted
    函数,如果是这样,则必须构建原始词典,但这次是排序的

    2.2
    排序
    方法

  • 应用
    排序
    功能

    payload = ast.literal_eval(json_string)
    sub_order_dict = sorted(payload["glossary"]["GlossDiv"]["GlossList"], key=lambda x: x["ID"])
    d = {'glossary': {'title': 'example glossary',
         'GlossDiv': {'title': 'S',
               'GlossList': sub_order_dit}}}
    
    应用
    排序
    方法

    payload = ast.literal_eval(json_string)
    payload["glossary"]["GlossDiv"]["GlossList"].sort(key=lambda x: x["ID"])
    
    对于这两种情况,
    有效载荷的输出为:

    {'glossary': {'title': 'example glossary',
      'GlossDiv': {'title': 'S',
       'GlossList': [{'ID': 'ABCD',
         'SortAs': 'SGML',
         'GlossTerm': 'Standard Generalized Markup Language',
         'Acronym': 'SGML',
         'Abbrev': 'ISO 8879:1986',
         'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
          'GlossSeeAlso': ['GML', 'XML']},
         'GlossSee': 'markup'},
        {'ID': 'ABRA',
         'SortAs': 'SGML',
         'GlossTerm': 'Standard Generalized Markup Language',
         'Acronym': 'SGML',
         'Abbrev': 'ISO 8879:1986',
         'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
          'GlossSeeAlso': ['GML', 'XML']},
         'GlossSee': 'markup'},
        {'ID': 'PQRS',
         'SortAs': 'SGML',
         'GlossTerm': 'Standard Generalized Markup Language',
         'Acronym': 'SGML',
         'Abbrev': 'ISO 8879:1986',
         'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
          'GlossSeeAlso': ['GML', 'XML']},
         'GlossSee': 'markup'},
        {'ID': 'SGML',
         'SortAs': 'SGML',
         'GlossTerm': 'Standard Generalized Markup Language',
         'Acronym': 'SGML',
         'Abbrev': 'ISO 8879:1986',
         'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
          'GlossSeeAlso': ['GML', 'XML']},
         'GlossSee': 'markup'}]}}}
    
    print( sorted(payload["glossary"]["GlossDiv"]["GlossList"], key=lambda x: x["ID"]) )
    
    [{'Abbrev': 'ISO 8879:1986',
      'Acronym': 'SGML',
      'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
                   'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
      'GlossSee': 'markup',
      'GlossTerm': 'Standard Generalized Markup Language',
      'ID': 'ABCD',
      'SortAs': 'SGML'},
     {'Abbrev': 'ISO 8879:1986',
      'Acronym': 'SGML',
      'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
                   'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
      'GlossSee': 'markup',
      'GlossTerm': 'Standard Generalized Markup Language',
      'ID': 'ABRA',
      'SortAs': 'SGML'},
     {'Abbrev': 'ISO 8879:1986',
      'Acronym': 'SGML',
      'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
                   'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
      'GlossSee': 'markup',
      'GlossTerm': 'Standard Generalized Markup Language',
      'ID': 'PQRS',
      'SortAs': 'SGML'},
     {'Abbrev': 'ISO 8879:1986',
      'Acronym': 'SGML',
      'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
                   'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
      'GlossSee': 'markup',
      'GlossTerm': 'Standard Generalized Markup Language',
      'ID': 'SGML',
      'SortAs': 'SGML'}]
    

    如果您只需要
    GlossList
    排序,请尝试在
    键中使用
    sorted
    lambda

    Ex:

    {'glossary': {'title': 'example glossary',
      'GlossDiv': {'title': 'S',
       'GlossList': [{'ID': 'ABCD',
         'SortAs': 'SGML',
         'GlossTerm': 'Standard Generalized Markup Language',
         'Acronym': 'SGML',
         'Abbrev': 'ISO 8879:1986',
         'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
          'GlossSeeAlso': ['GML', 'XML']},
         'GlossSee': 'markup'},
        {'ID': 'ABRA',
         'SortAs': 'SGML',
         'GlossTerm': 'Standard Generalized Markup Language',
         'Acronym': 'SGML',
         'Abbrev': 'ISO 8879:1986',
         'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
          'GlossSeeAlso': ['GML', 'XML']},
         'GlossSee': 'markup'},
        {'ID': 'PQRS',
         'SortAs': 'SGML',
         'GlossTerm': 'Standard Generalized Markup Language',
         'Acronym': 'SGML',
         'Abbrev': 'ISO 8879:1986',
         'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
          'GlossSeeAlso': ['GML', 'XML']},
         'GlossSee': 'markup'},
        {'ID': 'SGML',
         'SortAs': 'SGML',
         'GlossTerm': 'Standard Generalized Markup Language',
         'Acronym': 'SGML',
         'Abbrev': 'ISO 8879:1986',
         'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
          'GlossSeeAlso': ['GML', 'XML']},
         'GlossSee': 'markup'}]}}}
    
    print( sorted(payload["glossary"]["GlossDiv"]["GlossList"], key=lambda x: x["ID"]) )
    
    [{'Abbrev': 'ISO 8879:1986',
      'Acronym': 'SGML',
      'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
                   'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
      'GlossSee': 'markup',
      'GlossTerm': 'Standard Generalized Markup Language',
      'ID': 'ABCD',
      'SortAs': 'SGML'},
     {'Abbrev': 'ISO 8879:1986',
      'Acronym': 'SGML',
      'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
                   'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
      'GlossSee': 'markup',
      'GlossTerm': 'Standard Generalized Markup Language',
      'ID': 'ABRA',
      'SortAs': 'SGML'},
     {'Abbrev': 'ISO 8879:1986',
      'Acronym': 'SGML',
      'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
                   'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
      'GlossSee': 'markup',
      'GlossTerm': 'Standard Generalized Markup Language',
      'ID': 'PQRS',
      'SortAs': 'SGML'},
     {'Abbrev': 'ISO 8879:1986',
      'Acronym': 'SGML',
      'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
                   'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
      'GlossSee': 'markup',
      'GlossTerm': 'Standard Generalized Markup Language',
      'ID': 'SGML',
      'SortAs': 'SGML'}]
    
    输出:

    {'glossary': {'title': 'example glossary',
      'GlossDiv': {'title': 'S',
       'GlossList': [{'ID': 'ABCD',
         'SortAs': 'SGML',
         'GlossTerm': 'Standard Generalized Markup Language',
         'Acronym': 'SGML',
         'Abbrev': 'ISO 8879:1986',
         'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
          'GlossSeeAlso': ['GML', 'XML']},
         'GlossSee': 'markup'},
        {'ID': 'ABRA',
         'SortAs': 'SGML',
         'GlossTerm': 'Standard Generalized Markup Language',
         'Acronym': 'SGML',
         'Abbrev': 'ISO 8879:1986',
         'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
          'GlossSeeAlso': ['GML', 'XML']},
         'GlossSee': 'markup'},
        {'ID': 'PQRS',
         'SortAs': 'SGML',
         'GlossTerm': 'Standard Generalized Markup Language',
         'Acronym': 'SGML',
         'Abbrev': 'ISO 8879:1986',
         'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
          'GlossSeeAlso': ['GML', 'XML']},
         'GlossSee': 'markup'},
        {'ID': 'SGML',
         'SortAs': 'SGML',
         'GlossTerm': 'Standard Generalized Markup Language',
         'Acronym': 'SGML',
         'Abbrev': 'ISO 8879:1986',
         'GlossDef': {'para': 'A meta-markup language, used to create markup languages such as DocBook.',
          'GlossSeeAlso': ['GML', 'XML']},
         'GlossSee': 'markup'}]}}}
    
    print( sorted(payload["glossary"]["GlossDiv"]["GlossList"], key=lambda x: x["ID"]) )
    
    [{'Abbrev': 'ISO 8879:1986',
      'Acronym': 'SGML',
      'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
                   'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
      'GlossSee': 'markup',
      'GlossTerm': 'Standard Generalized Markup Language',
      'ID': 'ABCD',
      'SortAs': 'SGML'},
     {'Abbrev': 'ISO 8879:1986',
      'Acronym': 'SGML',
      'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
                   'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
      'GlossSee': 'markup',
      'GlossTerm': 'Standard Generalized Markup Language',
      'ID': 'ABRA',
      'SortAs': 'SGML'},
     {'Abbrev': 'ISO 8879:1986',
      'Acronym': 'SGML',
      'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
                   'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
      'GlossSee': 'markup',
      'GlossTerm': 'Standard Generalized Markup Language',
      'ID': 'PQRS',
      'SortAs': 'SGML'},
     {'Abbrev': 'ISO 8879:1986',
      'Acronym': 'SGML',
      'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],
                   'para': 'A meta-markup language, used to create markup languages such as DocBook.'},
      'GlossSee': 'markup',
      'GlossTerm': 'Standard Generalized Markup Language',
      'ID': 'SGML',
      'SortAs': 'SGML'}]
    
    输出

    {
        "glossary": {
            "title": "example glossary",
            "GlossDiv": {
                "title": "S",
                "GlossList": [
                    {
                        "ID": "ABCD",
                        "SortAs": "SGML",
                        "GlossTerm": "Standard Generalized Markup Language",
                        "Acronym": "SGML",
                        "Abbrev": "ISO 8879:1986",
                        "GlossDef": {
                            "para": "A meta-markup language, used to create markup languages such as DocBook.",
                            "GlossSeeAlso": [
                                "GML",
                                "XML"
                            ]
                        },
                        "GlossSee": "markup"
                    },
                    {
                        "ID": "ABRA",
                        "SortAs": "SGML",
                        "GlossTerm": "Standard Generalized Markup Language",
                        "Acronym": "SGML",
                        "Abbrev": "ISO 8879:1986",
                        "GlossDef": {
                            "para": "A meta-markup language, used to create markup languages such as DocBook.",
                            "GlossSeeAlso": [
                                "GML",
                                "XML"
                            ]
                        },
                        "GlossSee": "markup"
                    },
                    {
                        "ID": "PQRS",
                        "SortAs": "SGML",
                        "GlossTerm": "Standard Generalized Markup Language",
                        "Acronym": "SGML",
                        "Abbrev": "ISO 8879:1986",
                        "GlossDef": {
                            "para": "A meta-markup language, used to create markup languages such as DocBook.",
                            "GlossSeeAlso": [
                                "GML",
                                "XML"
                            ]
                        },
                        "GlossSee": "markup"
                    },
                    {
                        "ID": "SGML",
                        "SortAs": "SGML",
                        "GlossTerm": "Standard Generalized Markup Language",
                        "Acronym": "SGML",
                        "Abbrev": "ISO 8879:1986",
                        "GlossDef": {
                            "para": "A meta-markup language, used to create markup languages such as DocBook.",
                            "GlossSeeAlso": [
                                "GML",
                                "XML"
                            ]
                        },
                        "GlossSee": "markup"
                    }
                ]
            }
        }
    }
    

    嘿,这不是正确的json。你能给出确切的数字吗string@Rhaman,正如InAFlash所说,您提供的
    JSON
    不正确。您是否介意确保您提供了一个有效的
    JSON
    。可能与您迄今为止努力实现的目标重复?请参阅@InAFlash,我获取了提供的字符串,并使用JSON验证器进行了验证,问题似乎出在
    “glossee”:“markup”}、
    中,
    应该注意。