【问题标题】:remove none value on a dict in python won't work在 python 中的 dict 上删除 none 值将不起作用
【发布时间】:2016-07-25 13:09:21
【问题描述】:

我想通过删除 None 值来修改我的 mongo DB 集合数据。我有一个嵌套的字典。

我做了一个查询以获取我的数据库中的所有数据库:

doc = db.events.find()
for document in doc:
    print  document

一份打印出来的文件是这样的:

{ u'_id': u'55f16d2a0f5cb40aa26a6f1b', u'event': {u'values': u'None', u'condition': u'None', u'comment': u'', u'date': u'None', u'delete': u'false'}}

所以我想替换每个文档中的所有None 值,其中 None 写入No,并将更新的文档保存在数据库中。

所以我这样做了:

def replace_none_values():
  doc = db.events.find()
  for document in doc:
    for key, value in document.items():
        if key == 'event':
           event_part = value
           for key1, value1 in event_part: 
               if value1 is None:
                  document['event'][key1] = 'No'
    db.events.save(document)
replace_none_values()

但是for key1, value1 in event_part: 中的代码没有被执行。我不知道为什么,我在这里做错了什么?有人可以帮帮我吗?

【问题讨论】:

    标签: python mongodb list dictionary nonetype


    【解决方案1】:

    在您的示例中,当您调用 replace_none_values 时括号丢失

    使用:

    replace_none_values() 
    

    代替:

    replace_none_values
    

    【讨论】:

    • 我修改了问题,因为我在写问题时犯了那个错误,无论如何我的错误在其他地方。
    • 在这种情况下,@moses-koledoye 的答案是你最好的选择
    【解决方案2】:

    再次使用items 方法,因为您拥有的是一个嵌套字典。请注意,字典中的值不是常量None,而是字符串'None',所以if value1 is None 不会按照您的意图进行:

    for key1, value1 in event_part.items(): 
    #                                ^
         if value1 == 'None':
             document['event'][key1] = 'No'
    

    然后调用函数:replace_none_values()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 2021-04-12
      • 2013-04-12
      • 2011-03-25
      相关资源
      最近更新 更多