【问题标题】:How to prevent double interation of list of dictionaries?如何防止字典列表的重复迭代?
【发布时间】:2018-10-24 03:11:36
【问题描述】:

我正在尝试通过从 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'

【问题讨论】:

  • 总是id 和text?
  • @Roelant 是的,这是正确的
  • 你为什么有k == data_decoded['text2']:?

标签: python json python-3.x key-value


【解决方案1】:

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

如果你使用>= 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']) 

【讨论】:

  • 我不得不像这样更改引号:query = '' field = data_decoded['text'] for pair in data_list: query += "update {field} set where 'id' = {pair['id']} where 'text' = {data['text']}" print(query)
  • 上述代码输出如下:update {field} set where 'id' = {pair['id']} where 'text' = {data['text']} update {field} set where 'id' = {pair['id']} where 'text' = {data['text']}update {field} set where 'id' = {pair['id']} where 'text' = {data['text']}
  • 它是python 3.6中引入的格式化字符串的新简写,以下两个是等价的:a = 1; print('the number is {a}'.format(a=a))和a = 1; print(f'the number is {a}')。有时人们出于这个原因使用.format(**locals()) :)
  • 添加了其他格式化方法,还删除了 'id' 撇号,就我使用 SQL 而言,这些不是必需的 :)
  • 我收到错误TypeError: string indices must be integers 新代码试图弄清楚
猜你喜欢
  • 2019-04-30
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
相关资源
最近更新 更多