2017-10-18 121 views
0

我想创建JSON文件。使用json.dumps和成功打印。 我有一个问题。python:附加到数据使用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循环动态地更改这些名称。 谢谢。

+0

请说清楚你在问题中的期望? –

+0

起初我会预期指数会改变。用你的代码'KIND1'和'KIND2'应该是一样的。 –

+0

所以基本上,你想增加TABLE1,TABLE2,TABLE3等的表名(对于KIND也是一样),对吧? –

回答

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 

,因为你给它分配你不需要动态表名到字典键。

+0

谢谢!我解决了它 – mark3

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 

注:我知道这是可以优化的,但是为了简单起见,我把它原样。

+0

谢谢!我解决了它。 – mark3

+0

但它有一个问题。 [TypeError:'str'对象不支持项目分配]。我不知道为什么这个错误。无论如何,感谢您帮助我们排除故障 – mark3