当前位置: 首页 > 面试题库 >

Python中的自定义JSON sort_keys顺序

井誉
2023-03-14
问题内容

Python 2.6中有什么方法可以向JSON的sort_keys提供自定义键或cmp函数?

我有一个来自JSON的字典列表,如下所示:

[
  {
    "key": "numberpuzzles1",
    "url": "number-puzzle-i.html",
    "title": "Number Puzzle I",
    "category": "nestedloops",
    "points": "60",
    "n": "087"
  },
  {
     "key": "gettingindividualdigits",
     "url": "getting-individual-digits.html",
     "title": "Getting Individual Digits",
     "category": "nestedloops",
     "points": "80",
     "n": "088"
  }
]

…我已将其存储到list变量中assigndb。我希望能够加载JSON,对其进行修改,然后使用dumps(或其他方式)将其序列化回去,同时保持
顺序不变

到目前为止,我已经尝试过以下方法:

ordering = {'key': 0, 'url': 1, 'title': 2, 'category': 3,
             'flags': 4, 'points': 5, 'n': 6}

def key_func(k):
    return ordering[k]

# renumber assignments sequentially
for (i, a) in enumerate(assigndb):
    a["n"] = "%03d" % (i+1)

s = json.dumps(assigndb, indent=2, sort_keys=True, key=key_func)

…但是当然dumps不像那样支持自定义键list.sort()。有风俗的东西JSONEncoder吗?我似乎无法继续前进。


问题答案:

这有点丑陋,但是如果tokland的解决方案对您不起作用:

data = [{'category': 'nestedloops', 'title': 'Number Puzzle I', 'url': 'number-puzzle-i.html', 'n': '087', 'points': '60', 'key': 'numberpuzzles1'}, {'category': 'nestedloops', 'title': 'Getting Individual Digits', 'url': 'getting-individual-digits.html', 'n': '088', 'points': '80', 'key': 'gettingindividualdigits'}]
ordering = {'key': 0, 'url': 1, 'title': 2, 'category': 3,
            'flags': 4, 'points': 5, 'n': 6}
outlist = []
for d in data:
    outlist.append([])
    for k in sorted(d.keys(), key=lambda k: ordering[k]):
        outlist[-1].append(json.dumps({k: d[k]}))

for i, l in enumerate(outlist):
    outlist[i] = "{" + ",".join((s[1:-1] for s in outlist[i])) + "}"

s = "[" + ",".join(outlist) + "]"


 类似资料:
  • 问题内容: 我有一张带有类别的表: 现在,我想将select语句的结果排序为 例如。在MySQL中,您可以这样做: 但是,您将如何在SQLite中做到这一点?我没有“订购依据”字段。 问题答案:

  • 我对React Router中路由的渲染顺序有问题。据我所知,任何子路由都将在其父路由之后进行渲染,因此将在DOM中的父路由之上进行渲染。 <代码> 我有这个路由器设置,但是在我从IndexRoute导航到/browse路由之后,浏览路由呈现在我的导航组件的顶部,我不能单击导航组件上的任何内容。 我的问题是如何强制Nav组件始终最后渲染,或者是否有更好的方法来构建我的应用程序以避免这种情况。 谢谢

  • 问题内容: 在MySQL中,如何定义自定义排序顺序。 为了尝试解释我想要考虑的表,请执行以下操作: 在这里,我想返回按语言和升序ID排序的所有行,以便首先出现Language = ENU,然后是JPN,最后是DAN。 结果应为:a,d,b,e,c,f等。 这有可能吗? 问题答案: MySQL有一个方便的函数,它非常适合执行此类任务。 但是请注意, 由于其他DBMS可能没有此功能,因此它使SQL的可

  • 问题内容: 我有一个清单 我想按1. 2. 3.的顺序对其进行排序。 结果: 我在stackoverflow中看到了其他类似的问题,但是没有类似的问题或对我容易适用。 问题答案: 我们在这里所做的全部工作是通过为列表中的每个元素而不是整个列表返回一个整数来提供一个新的元素进行排序。我们 可以 使用内联三元表达式,但这会有点麻烦。

  • 我有一个表格,例如如下: 我想在特定条件下对上述数据进行排序,例如:按升序对值s2的数据进行排序,其中col2=A5,这意味着数据应按正常顺序进行排序,但如果col2='A5',则值s2的顺序应为升序或降序的行应排在第一位,如下所示。 col2='A5'中的数据应根据列values2的值按升序或降序排列。这能实现吗? 具体来说,让我们只进行排序。如果我按col2下单。行将按A1、A2、A3、A4、

  • 在python 3.10中,我想在同一个文件中定义两个类,其中每个类的一个方法必须向另一个方法输入提示(代码如下)。 由于必须先定义一个,因此不允许提示,因为另一个类型尚未定义。我如何解决或绕过这个问题?