首页 > 解决方案 > 如何防止字典列表的双重交互?

问题描述

我正在尝试通过从 json 对象字符串填充来创建文本字符串。

当我遍历字典列表时,迭代器将字符串加倍。我该如何解决?

到目前为止的代码:

import json

data = '''{
 "text": "aaa",
 "text2": "bbb",
 "data": [
   {
     "id": "1",
     "text": "Red"
   },    {
     "id": "2",
     "text": "Blue"
   }
 ]
}'''

data_decoded = json.loads(data)
data_list = data_decoded['data']
insertQuery  = "update "+ data_decoded['text'] +" set "
#print(insertQuery)
for pair in data_list:
   for k, v in pair.items():
       if k == data_decoded['text2']:
           where = ' \"' + k + '\" = \'' + v + '\''
       else:
           insertQuery = insertQuery + ' where \"' +k+'\" = \''+ v + '\''

   query = insertQuery + where  
   print(query)

输出:

update aaa set  where "id" = '1' where "text" = 'Red' "id" = '2'
update aaa set  where "id" = '1' where "text" = 'Red' where "id" = '2' where "text" = 'Blue' "id" = '2'

我想要的结果是代码为每个键值对打印一个句子,如下所示:

update aaa set  where "id" = '1' where "text" = 'Red'
update aaa set  where "id" = '2' where "text" = 'Blue'

标签: pythonjsonpython-3.xkey-value

解决方案


不完全确定,但您可以只访问您的字典项目而不是循环它们:)

如果你使用>= python 3.6

query = ''
field = data_decoded['text']
for pair in data_list:
   query += f"update {field} set where id = {pair['id']} where text = {pair ['text']}\n" 

除此以外:

query = ''
field = data_decoded['text']
for pair in data_list:
   query += "update {field} set where id = {id} where text = {text}\n".format(field=field, id=pair['id'], text=pair['text']) 

推荐阅读