【问题标题】:Alternative implementations with ternary operators, one liners三元运算符的替代实现,一个衬里
【发布时间】:2020-08-27 04:32:08
【问题描述】:

我有一本包含一些数据的字典,我想检查一下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)

我想知道哪些是更好(高效/更快)的实现方式。 我的意思是像一个班轮[我知道我写的一个班轮是错误的]

例如pass if data in a else print('missing ', data) for data in obligatory_data_fields

【问题讨论】:

  • print('\n'.join([f'missing: {datum}' for datum in obligatory_data_fields if datum not in a]))

标签: python conditional-operator


【解决方案1】:

您还可以将字典的键转换为集合并使用集合差异来获取缺失值:

>>> set(obligatory_data_fields)-set(a)
>>> set() # Empty set, every key in obligatory_data_fields is present in 'a'

【讨论】:

    【解决方案2】:

    如果你只是想验证,可以使用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
    []
    

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 2020-10-06
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      相关资源
      最近更新 更多