3

長いデータ構造 (「celldict」と呼ばれる辞書) を Json 形式で出力する Python スクリプトを作成しました。その一部を以下に示します。

{
    "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
        }
    ]
}

json 出力を Python でフォーマットして、必要なものを取得する方法はありますか? そうです:

print json.dumps(celldict)

私の出力を取得します。どんな助けでも大歓迎です。

4

2 に答える 2

9

別のdictの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
}
于 2012-11-28T14:48:11.167 に答える
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)

(免責事項: このコードはテストしていませんが、少なくとも基本的な考え方は理解できるはずです)

于 2012-11-28T14:56:10.573 に答える