我编写了一个Python脚本,以Json格式输出一个长数据结构(我称之为“celldict”的字典)。这是其中的一小部分:
{
"1224": {
"OUT3FA_5": 12,
"IN1": 37,
"Total_IN1": 37
},
"1225": {
"OUT3FA_5": 24,
"IN1": 59,
"Total_IN1": 22
}
}
但我想做的是这样的事情:
{
"success": true,
"data": [
{
"Week":"1224",
"OUT3FA_5": 65,
"IN1": 85,
"Total_IN1": 100
},
{
"Week":"1225",
"OUT3FA_5": 30,
"IN1": 40,
"Total_IN1": 120
}
]
}
有没有办法用Python格式化json输出以获得我想要的东西? 我这样做:
print json.dumps(celldict)
获取我的输出。 任何帮助都会非常感激。
答案 0 :(得分:9)
只需将celldict
放入另一个字典:
json.dumps({'success': True, 'data': celldict.values()})
您必须先将Week
密钥添加到celldict
字典中:
for d in celldict.itervalues():
celldict['Week'] = '1238'
或使用即时创建每个词典的副本:
json.dumps({'success': True, 'data': [dict(d, Week='1238') for d in celldict.values()]})
后一种方法,有一些缩进,产生:
>>> print json.dumps({'success': True, 'data': [dict(d, Week='1238') for d in celldict.values()]}, indent=4)
{
"data": [
{
"OUT3FA_5": 24,
"Week": "1238",
"Total_IN1": 22,
"IN1": 59
},
{
"OUT3FA_5": 12,
"Week": "1238",
"Total_IN1": 37,
"IN1": 37
}
],
"success": true
}
在行之间阅读,似乎输入示例中的1224
和1225
键实际上是您所指的周数。如果是这样,它们很容易合并:
json.dumps({'success': True, 'data': [dict(d, Week=k) for k, d in celldict.iteritems()]})
会产生:
{
"data": [
{
"OUT3FA_5": 24,
"Week": "1225",
"Total_IN1": 22,
"IN1": 59
},
{
"OUT3FA_5": 12,
"Week": "1224",
"Total_IN1": 37,
"IN1": 37
}
],
"success": true
}
答案 1 :(得分:0)
json模块遵循数据结构,因此要获得所需的输出,您必须重新排列数据。您可以构建一个这样的新字典:
data = []
for week, values in celldict.iteritems():
v2 = copy.copy(values)
v2['week'] = week
data.push(v2)
newdict = { 'success' : true,
'data' : data }
json.dumps(newdict)
(免责声明:我没有测试这段代码,但至少应该给你一个基本的想法)