三元运算符的替代实现,一个衬里
Alternative implementations with ternary operators, one liners
我有一个包含一些数据的字典,我想检查 obligatory_data_fields
的每个字段是否都包含在这个字典中。
obligatory_data_fields = ("nickname", "name", "picture", "updated_at", "email", "email_verified",
"iss", "sub", "aud", "iat", "exp")
a = {
"nickname": "a",
"name": "abcd@email.gr",
"picture": "https://s.gravatar.com/avatar/a.png",
"updated_at": "2020-05-07T08:44:10.091Z",
"email": "abcd@email.gr",
"email_verified": 'false',
"iss": "x",
"sub": "x",
"aud": "x",
"iat": 1588841051,
"exp": 1588877051
}
所以最明显的是这个:
for data in obligatory_data_fields:
if data in a:
pass
else:
print('missing ', data)
我想知道哪些是更好的 (efficient/faster) 实现方法。
我的意思是像一个班轮[我知道我写的一个班轮是错误的]
例如pass if data in a else print('missing ', data) for data in obligatory_data_fields
如果只想验证,可以使用all
:
>>> all(field in a for field in obligatory_data_fields)
True
如果您确实需要每个缺失字段的名称,您可以使用列表理解:
>>> missing = [field for field in obligatory_data_fields if field not in a]
>>> missing
[]
你也可以将字典的键值转换成一个集合,然后用集合差分得到缺失值:
>>> set(obligatory_data_fields)-set(a)
>>> set() # Empty set, every key in obligatory_data_fields is present in 'a'
我有一个包含一些数据的字典,我想检查 obligatory_data_fields
的每个字段是否都包含在这个字典中。
obligatory_data_fields = ("nickname", "name", "picture", "updated_at", "email", "email_verified",
"iss", "sub", "aud", "iat", "exp")
a = {
"nickname": "a",
"name": "abcd@email.gr",
"picture": "https://s.gravatar.com/avatar/a.png",
"updated_at": "2020-05-07T08:44:10.091Z",
"email": "abcd@email.gr",
"email_verified": 'false',
"iss": "x",
"sub": "x",
"aud": "x",
"iat": 1588841051,
"exp": 1588877051
}
所以最明显的是这个:
for data in obligatory_data_fields:
if data in a:
pass
else:
print('missing ', data)
我想知道哪些是更好的 (efficient/faster) 实现方法。 我的意思是像一个班轮[我知道我写的一个班轮是错误的]
例如pass if data in a else print('missing ', data) for data in obligatory_data_fields
如果只想验证,可以使用all
:
>>> all(field in a for field in obligatory_data_fields)
True
如果您确实需要每个缺失字段的名称,您可以使用列表理解:
>>> missing = [field for field in obligatory_data_fields if field not in a]
>>> missing
[]
你也可以将字典的键值转换成一个集合,然后用集合差分得到缺失值:
>>> set(obligatory_data_fields)-set(a)
>>> set() # Empty set, every key in obligatory_data_fields is present in 'a'