从mongodb将数据导出到csv时,我遇到了python脚本中缺少字段名称的问题。类型字段名称存在于第一个记录中,但它不会出现在其余记录中。如果不存在,如何编写python脚本为type字段赋予null值。
Mongodb集合的样本:
"stages": [
{
"interview": false,
"hmNotification": false,
"hmStage": false,
"type": "new",
"isEditable": false,
"order": 0,
"name": {
"en": "New"
},
"stageId": "51d1a2f4c0d9887b214f3694"
},
{
"interview": false,
"hmNotification": true,
"isEditable": true,
"order": 1,
"hmStage": true,
"name": {
"en": "Pre-Screen"
},
"stageId": "51f0078d7297363f62059699"
},
{
"interview": false,
"hmNotification": false,
"hmStage": false,
"isEditable": true,
"order": 2,
"name": {
"en": "Phone Screen"
},
"stageId": "51d1a326c0d9887721778eae"
}]
Python脚本示例:
import csv
cursor = db.workflows.find( {}, {'_id': 1, 'stages.interview': 1, 'stages.hmNotification': 1, 'stages.hmStage': 1, 'stages.type':1, 'stages.isEditable':1, 'stages.order':1,
'stages.name':1, 'stages.stageId':1 })
flattened_records = []
for stages_record in cursor:
stages_record_id = stages_record['_id']
for stage_record in stages_record['stages']:
flattened_record = {
'_id': stages_record_id,
'stages.interview': stage_record['interview'],
'stages.hmNotification': stage_record['hmNotification'],
'stages.hmStage': stage_record['hmStage'],
'stages.type': stage_record['type'],
'stages.isEditable': stage_record['isEditable'],
'stages.order': stage_record['order'],
'stages.name': stage_record['name'],
'stages.stageId': stage_record['stageId']}
flattened_records.append(flattened_record)
运行python脚本时,它会显示keyerror:"键入"。请帮我如何在脚本中添加缺少的字段名称。
答案 0 :(得分:0)
当您尝试获取Python字典中可能不存在的值时,可以使用.get()
类的dict方法。
例如,假设你有一个这样的字典:
my_dict = {'a': 1,
'b': 2,
'c': 3}
您可以使用get
方法获取其中一个密钥:
>>> print(my_dict.get('a'))
1
但是,如果您尝试获取不存在的密钥(例如does_not_exist
),默认情况下您将获得None
:
>>> print(my_dict.get("does_not_exist"))
None
如文档中所述,您还可以提供默认值,该值将在密钥不存在时返回:
>>> print(my_dict.get("does_not_exist", "default_value"))
default_value
但如果密钥确实存在于字典中,则不会使用此默认值(如果密钥确实存在,您将获得其值):
>>> print(my_dict.get("a", "default_value"))
1
知道,当您构建 flattened_record 时,您可以这样做:
'stages.hmStage': stage_record['hmStage'],
'stages.type': stage_record.get('type', ""),
'stages.isEditable': stage_record['isEditable'],
因此,如果stage_record
字典不包含密钥type
,get('type')
将返回一个空字符串。
你也可以尝试:
'stages.hmStage': stage_record['hmStage'],
'stages.type': stage_record.get('type'),
'stages.isEditable': stage_record['isEditable'],
当stage_record.get('type')
不包含None
密钥时,然后stage_record
将返回type
。
或者您可以设置默认"UNKNOWN"
'stages.type': stage_record.get('type', "UNKNOWN"),