python:追加数据使用json.dumps

时间:2017-10-18 09:12:03

标签: python json

我正在尝试创建JSON文件。使用json.dumps并成功打印。 我有一个问题。

我想要的格式是

channel_info = OrderedDict()
table = OrderedDict()
table2 = OrderedDict()

channel_info["KIND1"] = pkind[2].text
table[ptime[10].text] = pnk[11].text
table[ptime[11].text] = pnk[12].text
channel_info["TABLE1"] = table

channel_info["KIND2"] = pkind[2].text
table2[ptime[10].text] = pnk[11].text
table2[ptime[11].text] = pnk[12].text
channel_info["TABLE2"] = table2

结果:

{
"KIND1": "xxxx",
"TABLE1": {
    "09:10": "aaaa",
    "10:10": "bbbb"
},
"KIND2": "yyyy",
"TABLE2": {
    "09:10": "cccc",
    "10:10": "dddd"
}

}

如何使用while循环输出相同的格式? JSON对象的名称? KIND1,TABLE1,KIND2,TABLE2等...... 我想知道如何使用while循环动态更改这些名称。 谢谢。

2 个答案:

答案 0 :(得分:0)

你可以这样做(假设table字典在每个循环中都是静态的,就像你给出的例子中所示):

channel_info = dict()
# n_tables is the number of iterations you need
for i in range(n_tables):
    table = dict()
    channel_info["KIND%s" % (i+1)] = pkind[1].text
    table[ptime[10].text] = pnk[11].text
    table[ptime[11].text] = pnk[12].text
    channel_info["TABLE%s" % (i+1)] = table

您不需要动态表名,因为您将其分配给字典键。

答案 1 :(得分:0)

基本上,如果我理解你的问题:

...
i=0
no_of_tables = 4 
while i<=no_of_tables:
  table_counter = i+1
  table_counter = str(table_counter)
  kind = 'KIND' + table_counter
  table = 'TABLE' + table_counter
  channel_info[kind] = pkind[2].text
  table[ptime[10].text] = pnk[11].text
  table[ptime[11].text] = pnk[12].text
  channel_info[table] = table

注意:我知道它可以进行优化,但为了简单起见,我将其保留原样。