python生成json_生成动态嵌套JSON对象和数组-python - python

正如问题所解释的那样,我一直在尝试生成嵌套的JSON对象。在这种情况下,我有for循环从字典dic中获取数据。下面是代码:

f = open("test_json.txt", 'w')

flag = False

temp = ""

start = "{\n\t\"filename\"" + " : \"" +initial_filename+"\",\n\t\"data\"" +" : " +" [\n"

end = "\n\t]" +"\n}"

f.write(start)

for i, (key,value) in enumerate(dic.iteritems()):

f.write("{\n\t\"keyword\":"+"\""+str(key)+"\""+",\n")

f.write("\"term_freq\":"+str(len(value))+",\n")

f.write("\"lists\":[\n\t")

for item in value:

f.write("{\n")

f.write("\t\t\"occurance\" :"+str(item)+"\n")

#Check last object

if value.index(item)+1 == len(value):

f.write("}\n"

f.write("]\n")

else:

f.write("},") # close occurrence object

# Check last item in dic

if i == len(dic)-1:

flag = True

if(flag):

f.write("}")

else:

f.write("},") #close lists object

flag = False

#check for flag

f.write("]") #close lists array

f.write("}")

预期输出为:

{

"filename": "abc.pdf",

"data": [{

"keyword": "irritation",

"term_freq": 5,

"lists": [{

"occurance": 1

}, {

"occurance": 1

}, {

"occurance": 1

}, {

"occurance": 1

}, {

"occurance": 2

}]

}, {

"keyword": "bomber",

"lists": [{

"occurance": 1

}, {

"occurance": 1

}, {

"occurance": 1

}, {

"occurance": 1

}, {

"occurance": 2

}],

"term_freq": 5

}]

}

但是目前我得到如下输出:

{

"filename": "abc.pdf",

"data": [{

"keyword": "irritation",

"term_freq": 5,

"lists": [{

"occurance": 1

}, {

"occurance": 1

}, {

"occurance": 1

}, {

"occurance": 1

}, {

"occurance": 2

},] // Here lies the problem "," before array(last element)

}, {

"keyword": "bomber",

"lists": [{

"occurance": 1

}, {

"occurance": 1

}, {

"occurance": 1

}, {

"occurance": 1

}, {

"occurance": 2

},], // Here lies the problem "," before array(last element)

"term_freq": 5

}]

}

请帮助,我正在尝试解决它,但是失败了。请不要将其标记为重复,因为我已经检查了其他答案并且完全没有帮助。

编辑1:

输入基本上是从映射类型为dic的字典中获取的

例如:“刺激” => [1、3、5、7、8]

其中刺激是关键,并映射到页码列表。

这基本上是在外部for循环中读取的,其中key是关键字,value是该关键字出现的页面列表。

编辑2:

dic = collections.defaultdict(list) # declaring the variable dictionary

dic[key].append(value) # inserting the values - useless to tell here

for key in dic:

# Here dic[x] represents list - each value of x

print key,":",dic[x],"\n" #prints the data in dictionary

参考方案

@andrea -f对我来说看起来不错,这是另一种解决方案:

随意选择两者:)

import json

dic = {

"bomber": [1, 2, 3, 4, 5],

"irritation": [1, 3, 5, 7, 8]

}

filename = "abc.pdf"

json_dict = {}

data = []

for k, v in dic.iteritems():

tmp_dict = {}

tmp_dict["keyword"] = k

tmp_dict["term_freq"] = len(v)

tmp_dict["lists"] = [{"occurrance": i} for i in v]

data.append(tmp_dict)

json_dict["filename"] = filename

json_dict["data"] = data

with open("abc.json", "w") as outfile:

json.dump(json_dict, outfile, indent=4, sort_keys=True)

同样的想法,我首先创建一个大的json_dict以直接保存在json中。我使用with语句保存json以避免捕获exception

另外,如果将来需要改进json.dumps()输出,则应该查看json的文档。

编辑

而且只是为了好玩,如果您不喜欢tmp var,则可以单行处理所有数据for循环:)

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]

它可以为最终解决方案提供一些不完全可读的内容,例如:

import json

json_dict = {

"filename": "abc.pdf",

"data": [{

"keyword": k,

"term_freq": len(v),

"lists": [{"occurrance": i} for i in v]

} for k, v in dic.iteritems()]

}

with open("abc.json", "w") as outfile:

json.dump(json_dict, outfile, indent=4, sort_keys=True)

编辑2

看来您不想将json保存为所需的输出,但还是想读取它。

实际上,您也可以使用json.dumps()来打印json。

with open('abc.json', 'r') as handle:

new_json_dict = json.load(handle)

print json.dumps(json_dict, indent=4, sort_keys=True)

但是,这里仍然存在一个问题,因为列表中"filename":的d在data之前,所以f会打印在列表的末尾。

要强制命令,您将必须在字典的生成中使用OrderedDict。请注意,python 2.X的语法很丑(imo)

这是新的完整解决方案;)

import json

from collections import OrderedDict

dic = {

'bomber': [1, 2, 3, 4, 5],

'irritation': [1, 3, 5, 7, 8]

}

json_dict = OrderedDict([

('filename', 'abc.pdf'),

('data', [ OrderedDict([

('keyword', k),

('term_freq', len(v)),

('lists', [{'occurrance': i} for i in v])

]) for k, v in dic.iteritems()])

])

with open('abc.json', 'w') as outfile:

json.dump(json_dict, outfile)

# Now to read the orderer json file

with open('abc.json', 'r') as handle:

new_json_dict = json.load(handle, object_pairs_hook=OrderedDict)

print json.dumps(json_dict, indent=4)

将输出:

{

"filename": "abc.pdf",

"data": [

{

"keyword": "bomber",

"term_freq": 5,

"lists": [

{

"occurrance": 1

},

{

"occurrance": 2

},

{

"occurrance": 3

},

{

"occurrance": 4

},

{

"occurrance": 5

}

]

},

{

"keyword": "irritation",

"term_freq": 5,

"lists": [

{

"occurrance": 1

},

{

"occurrance": 3

},

{

"occurrance": 5

},

{

"occurrance": 7

},

{

"occurrance": 8

}

]

}

]

}

但是要小心,在大多数情况下,最好保存常规的.json文件以使它们成为跨语言的。

Python uuid4,如何限制唯一字符的长度 - python

在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…json.dumps弄乱顺序 - python

我正在使用json module创建一个包含类似条目的json文件json.dumps({"fields": { "name": "%s", "city": "%s", "status": "%s", "cou…JSON SCHEMA PATTERN逗号分隔列表 - python

我的json模式中具有以下模式,并且我需要根据以下模式包含逗号分隔的值。当前模式只能像DV2一样处理一种模式所以我应该如何修改我的模式以包括多个字符串,如下所示,但它应该与声明的模式匹配。例如:“ DV2”,“ DEV1”,“ DEV3”,“ ST”, "ENVIRONMENT": { "type": "st…Python中的Json操作 - python

Latest_json和Historic_json函数返回:return(frame.to_json(orient='records')) 主功能:recentdata = recent_json(station) historicdata = historic_json(station) alldata = historicdata +…Python-crontab模块 - python

我正在尝试在Linux OS(CentOS 7)上使用Python-crontab模块我的配置文件如下:{ "ossConfigurationData": { "work1": [ { "cronInterval": "0 0 0 1 1 ?", "attribute&…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

彻底弄懂Qt的编码(汉字乱码问题及相关函数作用)

测试1 新建test工程用于测试&#xff0c;main.c文件内容如下&#xff1a; #include <QCoreApplication> #include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QString str_hanzi("百度"); // 汉字QString str_ascii(&…

【转】1.9 Asp.Net Core 轻松学-多线程之取消令牌(

目录 前言1. 多线程请求合并数据源2. 对长时间阻塞调用的异步取消令牌应用3. CancellationToken 的链式反应4. CancellationToken 令牌取消的三种方式结束语示例代码下载前言 取消令牌(CancellationToken) 是 .Net Core 中的一项重要功能&#xff0c;正确并合理的使用 Cancell…

python怎么改背景_python IDE背景怎么改

首先&#xff0c;在已经下载好的python文件目录下&#xff0c;找到config-highlight.def文件&#xff0c;我的是在H:\python\python3**\Lib\idlelib**文件夹下。 打开文件后&#xff0c;你会看到一些默认的颜色配置&#xff0c;比如经典的颜色配置就是白色背景&#xff0c;一般…

QML程序发布时无法正常运行的解决办法

1、运行依赖 以我的一个项目为例&#xff0c;此程序使用QQuickWidget将QWidget和QML结合。程序debug版发布时依赖的库如下&#xff1a; 大部分dll可以在Visual Studio中调试时的控制台中看出已加载的dll&#xff0c;只需到Qt安装目录下找到对应的dll即可。但是某些dll并没有提…

【转】1.A(译).NET4.X 并行任务中Task.Start()的FAQ

传送门&#xff1a;异步编程系列目录…… 近期有不少人向我咨询关于Task的Start()方法。比如&#xff1a;何时使用及何时不使用Start()、Start()又做了些什么……我想在这里回答一些问题试图澄清和平息任何关于Start()方法是什么以及做了什么的误解。 1. 问题&#xff…

python列表添加数字_Python-识别列表中的连续数字组

小编典典 编辑2&#xff1a;回答OP新要求 ranges [] for key, group in groupby(enumerate(data), lambda (index, item): index - item): group map(itemgetter(1), group) if len(group) > 1: ranges.append(xrange(group[0], group[-1])) else: ranges.append(group[0]…

QML项目笔记

引用资源文件内的资源时&#xff0c;一律加上qrc前缀&#xff0c;如&#xff1a;qrc:/img/avatar.png&#xff0c;否则无法加载。制作聊天气泡的方法&#xff1a;使用BorderImage元素。BorderImage源于CSS3新增的十分强大的border-image属性。可以实现安卓中的 点9图 效果。慎用…

【转】1.B(译).NET4.X并行任务Task需要释放吗?

传送门&#xff1a;异步编程系列目录…… 摘要&#xff1a;本博文解释在.NET 4.X中的Task使用完后为什么不应该调用Dispose()。并且说明.NET4.5对.NET4.0的Task对象进行的部分改进&#xff1a;减轻Task对WaitHandle对象的依赖&#xff0c;并且增强在释放了Task后对其成员的可访…

Qt:QSound无法播放.wav声音的解决办法

从网上下载了音频素材&#xff0c;格式为.wav&#xff0c;用QSound播放&#xff0c;没声音。刚开始放在资源文件里&#xff0c;后来看到有的人说不能引用资源文件里的音频文件&#xff0c;事实证明纯属扯淡&#xff01;改为播放本地文件系统内的音频文件&#xff0c;但是仍然无…

【转】UML基础: 第1部分 - 类图 (Class Diagram)

类图 类图是一个静态图。它代表了应用程序的静态视图。类图不仅用于可视化&#xff0c;描述和记录系统的不同方面&#xff0c;还用于构建软件应用程序的可执行代码。 类图描述了一个类的属性和操作&#xff0c;以及对系统施加的约束。类图被广泛用于面向对象系统的建模&#…

Qt QSS知识点记录

一、border-image的使用 具体使用方法参考css3的相关说明&#xff0c;这里主要记录一个使用技巧。 使用时发现按照css3指定的方法来设置边缘非拉伸区的宽度并没有效果。如 border-image: url(test.png) 10 10 10 10; 后来在网上搜索到一篇文章&#xff0c;提供了一个解决方…

int转换为cstring_PostgreSQL 隐式类型转换探秘

个人简介何小栋&#xff0c; 从事产品研发和架构设计工作&#xff0c;对Oracle、PostgreSQL有深入研究&#xff0c;ITPUB数据库版块资深版主。现就职于广州云图数据技术有限公司&#xff0c;系统架构师&#xff0c;博客&#xff1a;http://blog.itpub.net/6906/摘要本文通过与O…

【转】UML基础: 第 2 部分 - 对象图 (Object Diagram)

对象图是从类图派生的&#xff0c;因此对象图依赖于类图。 对象图表示类图的一个实例。类图和对象图的基本概念是相似的。对象图也表示系统的静态视图&#xff0c;但这个静态视图是系统在特定时刻的快照。 对象图用于呈现一组对象及其关系作为实例。 对象图的目的 图表的目…

Qt 界面设计笔记

1、今天遇到一个情形&#xff0c;在QScrollArea中设置一个QLabel的大小和QScrollArea一样大&#xff0c;设置完立即打印&#xff0c;大小的确是相同的。但是程序启动后&#xff0c;却显示出了滚动条&#xff0c;即QLabel比QScrollArea大。程序运行起来之后在事件响应函数中打印…

【转】1.C Task.CompletedTask和Task.Result小记

在任何返回Task的方法中&#xff0c;如果可以在不进行异步的情况下计算结果&#xff0c;则最好避免使用Task.Run。例如&#xff0c;一个简短的计算函数&#xff0c;或者测试中返回了一个预先计算过的结果&#xff0c;则无需使用Task.Run。 例如&#xff0c;定义了一个返回Task的…

外部依赖项很多未定义标识符_从日本编程书籍《我的第一本编程书》中译版看中文例程如何扬长避短——标识符(一)

日本作者平山尚在前言归结了本书的三点独特之处&#xff1a;从始至终只编写一个程序&#xff08;俄罗斯方块游戏&#xff09;使用专门的工具绝对面向首次接触程序的人群第一点&#xff0c;优势是一个项目主体贯穿全书&#xff0c;但同时很考验编排顺序&#xff0c;以及技术覆盖…

Qt: QTableView如何获取(行)选中、行切换信息

**情景&#xff1a;**做一个信息表格&#xff0c;需要多个Model切换&#xff0c;必须用QTableView&#xff0c;而不能用QTableWidget&#xff0c;因为后者不可以进行setModel()。 方案&#xff1a; QTableView和选择有关的的信号有&#xff1a; void activated(const QModelI…

动态网站的技术路线_3个好玩实用小网站!闲暇时间不妨打开看看

感谢你关注“最佳应用”每篇文章解决某行业或某人群的一个痛点第八十四期原创文章By&#xff1a;小佳昨天刷抖音听了一首很有魔性的歌曲&#xff0c;结果分享到社交平台&#xff0c;没想到被很多键盘侠喷了&#xff0c;留言全是批判“审美有毒”&#xff0c;这种垃圾歌曲能火就…

【转】1.DThread、ThreadPool、Task、Parallel的基本用法、区别以及弊端

多线程的操作在程序中也是比较常见的&#xff0c;比如开启一个线程执行一些比较耗时的操作(IO操作)&#xff0c;而主线程继续执行当前操作&#xff0c;不会造成主线程阻塞。线程又分为前台线程和后台线程&#xff0c;区别是&#xff1a;整个程序必须要运行完前台线程才会退出&a…

Qt使用导出类报错:error C2491: “ZMapWidget::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义

在使用一个继承自QObject带有Q_OBJECT宏的导出类时&#xff0c;编译报错&#xff1a;不允许 dllimport 静态数据成员 的定义。 原因是自动生成的moc文件带有静态函数&#xff0c;无法导出。 1、在Qt中的解决办法是不将导出宏定义成Q_DECL_IMPORT。 #if defined(ZMAP_LIBRARY…