我有一个巨大的文档,我使用正则表达式解析,提供类似于以下内容的txt文件(json.dump):
{
"stuff": [
{
"name": [
"frfer",
"niddsi",
],
"number": 11300,
"identifier": "Tsdsad"
},
{
"name": [
"Fast",
"Guard",
"Named",
],
"number": 117900,
"identifier": "Pdfms"
},
{
name: [
"Fast",
],
"number": 660,
"identifier": "Unnamed"
},
]
}
现在我想根据数字按升序对此文档进行排序。 (即“Pdfms”首先,“Tsdsad”第二,“未命名”第三)。我不确定如何在python中启动它,有人能给我一个指向正确方向的点吗?提前致谢
答案 0 :(得分:2)
第一个问题:那不是合法的JSON。你有额外的逗号(JSON不喜欢[a,b,c,]
;它在源代码中坚持[a,b,c]
),你有一些标识符(例如name
的第三个实例),没有被引用。理想情况下,您将改进初始文本文件解析和JSONification以修复这些问题。或者您可以动态处理这些修正,如下所示:
json_source = """
... your text data from above ...
"""
import re
BADCOMMA = re.compile(r',\s+\]')
json_source = BADCOMMA.sub(']', json_source)
BADIDENTIFIER = re.compile(r'\s+name:\s*')
json_source = BADIDENTIFIER.sub('"name":', json_source)
请注意,假设您可以动态解决所有可能出现的问题,那就是脆弱的模式。同样,通过正则表达式编辑结构化数据文件。最好从一开始就生成好的JSON。
现在,如何排序:
import json
data = json.loads(json_source)
data['stuff'].sort(key=lambda item: item['number'], reverse=True)
这就是"东西"数组,由"数字"值,并将其反转(因为您想要输出的示例表示降序而不是典型的升序排序)。
为了证明排序已经完成了你想要的,pprint
模块可以很方便:
from pprint import pprint
pprint(data)
收率:
{u'stuff': [{u'identifier': u'Pdfms',
u'name': [u'Fast', u'Guard', u'Named'],
u'number': 117900},
{u'identifier': u'Tsdsad',
u'name': [u'frfer', u'niddsi'],
u'number': 11300},
{u'identifier': u'Unnamed', u'name': [u'Fast'], u'number': 660}]}