【问题标题】:Pythonic way to check a dict has all the keys it should检查 dict 的 Pythonic 方法具有应有的所有键
【发布时间】:2026-01-13 21:15:01
【问题描述】:

我有一些工作代码,但想知道是否有更 Pythonic 的方式来编写代码。

工作代码

mydict = {"a":77, "b":22}
wanted_dict_keys = ["a", "b", "c"]

# is each item of the wanted_dict_key present as a key in the dict
def all_keys_present(wanted_dict_keys, mydict):
    existing_keys = []
    keys_missing = []
    for k,v in mydict.items():
        existing_keys.append(k)
    #print(existing_keys)
    for key in wanted_dict_keys:
        if key not in existing_keys:
            keys_missing.append(key)
            #print("this key is not in the dict: ", key)
    return existing_keys, keys_missing

existing_keys, keys_missing = all_keys_present(wanted_dict_keys, mydict)
print('\n')
print("existing_keys : ", existing_keys)
print("keys_missing : ", keys_missing)

【问题讨论】:

标签: python dictionary set


【解决方案1】:

您可以使用set 算术以下方式

mydict = {"a":77, "b":22}
wanted_dict_keys = ["a", "b", "c"]
missing = set(wanted_dict_keys).difference(mydict.keys())
print(missing)

输出:

{'c'}

您可以在 if 语句中使用这种创建的 missing,因为空集被认为是 False 和所有其他 True

【讨论】:

    【解决方案2】:

    ✅ 内联解决方案:同时获取existing_keysmissing_keys

    existing_keys = [k for k in wanted_dict_keys if k in mydict.keys()]
    missing_keys  = [k for k in wanted_dict_keys if k not in mydict.keys()]
    

    但是,如果你想保持相同的代码结构:

    mydict = {"a":77, "b":22}
    wanted_dict_keys = ["a", "b", "c"]
    
    def all_keys_present(wanted_dict_keys, mydict):    
        existing_keys = [k for k in wanted_dict_keys if k in mydict.keys()]
        missing_keys  = [k for k in wanted_dict_keys if k not in mydict.keys()]
        return existing_keys, missing_keys
    
    existing_keys, missing_keys = all_keys_present(wanted_dict_keys, mydict)
    print('\n')
    print("existing_keys : ", existing_keys)
    print("missing_keys  : ", missing_keys)
    

    【讨论】:

    • 您不需要.keys() 调用,只需if k [not] in mydict 用于会员测试
    【解决方案3】:

    mydict.keys() 会给你所有的钥匙。 set 将进行相等性检查。

    mydict = {"a":77, "b":22}
    wanted_dict_keys = ["a", "b", "c"]
    
    if (set(mydict.keys()) == set(wanted_dict_keys)):
        print('all are present')
    else:
        print('not all are present')
    
    not all are present
    

    【讨论】:

      【解决方案4】:

      使用all:

      mydict = {"a":77, "b":22}
      wanted_dict_keys = ["a", "b", "c"]
      
      if all(k in mydict for k in wanted_dict_keys):
          print("All there")
      else:
          raise ValueError("Missing keys!")
      

      或者如果你想具体一点:

      not_present = [k for k in wanted_dict_keys if k not in mydict]
      
      if not_present:
          raise ValueError(f"Missing required keys {not_present}")
      else:
          print(f"Got keys: {list(mydict)}")
      

      【讨论】:

        【解决方案5】:

        如果可以有更多的键,那么你可以在将你的键列表变成一个集合后使用 issubset() 函数。

        if set(wanted_dict_keys).issubset(mydict):
            print("all keys are present")
        else:
            print("some keys are missing")
        

        如果您想避免每次检查都进行集合转换,您应该将您的 wanted_dict_keys 存储为集合而不是列表。

        【讨论】:

          最近更新 更多