Python 如果找到字符串/模式,则将其从列表中删除

Python 如果找到字符串/模式,则将其从列表中删除,python,pymongo,Python,Pymongo,我有一个JSON文件,我正在使用PyMongo从MongoDB数据库检索它 我通过执行以下操作将Python游标转换为列表: db = mongo_client.test_db table = db.test_table doc = list(table.find()) 现在我要做的是检查列表是否包含一个特定的字符串,如果它包含,它应该只保留该字符串的一个子字符串 列表: doc=[{'_id': ObjectId('5f45228293d7b757bcbd2d67'),'features':

我有一个JSON文件,我正在使用
PyMongo
从MongoDB数据库检索它

我通过执行以下操作将Python游标转换为列表:

db = mongo_client.test_db
table = db.test_table
doc = list(table.find())
现在我要做的是检查列表是否包含一个特定的字符串,如果它包含,它应该只保留该字符串的一个子字符串

列表:

doc=[{'_id': ObjectId('5f45228293d7b757bcbd2d67'),'features': [DBRef('featId', ObjectId('5f452e3793d7b757bcbd2d88'))]}]
doc=[{'_id': ObjectId('5f45228293d7b757bcbd2d67'),'features': ObjectId('5f452e3793d7b757bcbd2d88')}]
因此,目前我正在使用下面的代码检查列表中是否存在正常工作的
DBRef
。 但是为了只保留
ObjectId
,我不太确定用什么替换print语句

if "DBRef" in str(doc):
    print("its here") #remove the dbref and only keep alphanumeric value
else:
    print("not here") #do nothing to the list
预期输出(如果在列表中找到DBRef):

doc=[{'_id': ObjectId('5f45228293d7b757bcbd2d67'),'features': [DBRef('featId', ObjectId('5f452e3793d7b757bcbd2d88'))]}]
doc=[{'_id': ObjectId('5f45228293d7b757bcbd2d67'),'features': ObjectId('5f452e3793d7b757bcbd2d88')}]

据我所知,列表中有一个字典,因此可以只更新其中的一些值

不确定您希望doc变量的输出是什么,列表中有多少dict等等,但是,下面是我想到的:

  • 查找一个值,该值需要与regex一起保存,或仅通过引用对象id来保存
  • 使用所需的key:value对创建临时dict
  • 更新列表中现有的dict
  • 单据[0]引用的是列表的第一个元素

    ''蟒蛇

    备选案文1:

    #regex version in case saving ObjectId as bson.objectid is not required
    
    import re
    
    object_value = re.search("DBRef\('featId', ObjectId\((.*?)\)", str(doc[0]['features'])).group(1)
    d1 = {'features': f'ObjectId({object_value})'}
    doc[0].update(d1)
    
    备选案文2:

    #accessing the required value directly and saving it as ObjectId
    from bson.objectid import ObjectId
    from bson.dbref import DBRef
    
    object_value_no_regex = doc[0]['features'][0].id
    d1 = {'features': ObjectId(object_value_no_regex)}
    doc[0].update(d1)
    
    谢谢