总结字典中有多少个字段为空或不存在

Tes*_*est 3 python dictionary list

我有个问题。我在这些列表中有一个列表myList,还有一个字典。我想计算该字段是否dataOriginSystem为空或不存在。不幸的是我得到了错误的结果。if(key_nested == 'dataOriginSystem'): ... else: count =+ 1

原因在于 if 查询。既然我问,这个领域存在吗?如果不是,则将其累加,由于我循环遍历所有嵌套键,因此错误之一就在这里。另外,有没有办法提高效率?

如何查询有多少字段dataOriginSystem为空或不存在?

count = 0
for element in myList:
    for key in element.keys():
        if(key == 'metaData'):
            for key_nested in element[key].keys(): 
                if(key_nested == 'dataOriginSystem'):
                    if(key_nested == None):
                        count += 1
                else:
                    count += 1
print(count)
Run Code Online (Sandbox Code Playgroud)
myList = [
{'_id': 'orders/213123',
 'contactEditor': {'name': 'Max Power',
  'phone': '1234567',
  'email': 'max@power.com'},
 'contactSoldToParty': {'name': 'Max Not',
  'phone': '123456789',
  'email': 'maxnot@power.com'},
 'isCompleteDelivery': False,
 'metaData': {'dataOriginSystem': 'Goods',
  'dataOriginWasCreatedTime': '10:12:12',},
 'orderDate': '2021-02-22',
 'orderDateBuyer': '2021-02-22',
},
{'_id': 'orders/12323',
 'contactEditor': {'name': 'Max Power2',
  'phone': '1234567',
  'email': 'max@power.com'},
 'contactSoldToParty': {'name': 'Max Not',
  'phone': '123456789',
  'email': 'maxnot@power.com'},
 'isCompleteDelivery': False,
 'metaData': {'dataOriginSystem': 'Goods',
  'dataOriginWasCreatedTime': '10:12:12',},
 'orderDate': '2021-02-22',
 'orderDateBuyer': '2021-02-22',
 },
{'_id': 'orders/12323',
 'contactEditor': {'name': 'Max Power2',
  'phone': '1234567',
  'email': 'max@power.com'},
 'contactSoldToParty': {'name': 'Max Not',
  'phone': '123456789',
  'email': 'maxnot@power.com'},
 'isCompleteDelivery': False,
 'metaData': {
  'dataOriginWasCreatedTime': '10:12:12',},
 'orderDate': '2021-02-22',
 'orderDateBuyer': '2021-02-22',
 },
{'_id': 'orders/12323',
 'contactEditor': {'name': 'Max Power2',
  'phone': '1234567',
  'email': 'max@power.com'},
 'contactSoldToParty': {'name': 'Max Not',
  'phone': '123456789',
  'email': 'maxnot@power.com'},
 'isCompleteDelivery': False,
 'metaData': {'dataOriginSystem': None,
  'dataOriginWasCreatedTime': '10:12:12',},
 'orderDate': '2021-02-22',
 'orderDateBuyer': '2021-02-22',
 },
]
Run Code Online (Sandbox Code Playgroud)

结果应该是

[OUT] 2
# Because of the two last elements.
# The first element does not exist
# and the second ist None. 
Run Code Online (Sandbox Code Playgroud)

Nic*_*ick 7

您可以直接在嵌套键上使用dict.get,返回默认值None,然后计算None获得的值的数量:

sum(d['metaData'].get('dataOriginSystem', None) is None for d in myList)
Run Code Online (Sandbox Code Playgroud)

输出

2
Run Code Online (Sandbox Code Playgroud)