簡體   English   中英

檢查多個字典鍵是否匹配的最pythonic方法是什么

[英]What is most pythonic way to check if multiple dictionary keys match

假設我有一本字典my_dict

檢查my_dict['a'] == 'b' and my_dict['c'] == 'd' and my_dict['e'] == 'f'什么?

如果my_dict不存在鍵ace ,我不希望它拋出任何異常

您可以使用 Map 形成一個元組並進行比較。 通過映射 get 方法,丟失的鍵將產生一個 None 值並且不會崩潰。

(*map(my_dic.get,('a','c','e'),) == ('b','f','d')

您可以將值和鍵壓縮在一起,並在傳遞給all的生成器表達式中使用get()

my_dict = {'a':'b', 'c':'d','e':'f'}

keys = ['a', 'c', 'e']
vals = ['b', 'd', 'f']

all(my_dict.get(k) == v for k, v in zip(keys, vals))
# true

這假設值不是None ,因為get()為缺失值返回None 如果這很重要,您也可以檢查是否包含在內。

當鍵丟失或值不同時,這將是False ,例如:

my_dict = {'c':'d','e':'f'}

keys = ['a', 'c', 'e']
vals = ['b', 'd', 'f']

all(my_dict.get(k) == v for k, v in zip(keys, vals))
#False

由於這是一個非常簡單的用例,其中所需的值具有與鍵幾乎相同的字符代碼,因此您可以使用ord獲取單字符串的數字代碼點或序數,並使用chr將其轉換回單個- 字符串。

請注意,例如, b的代碼點比aa

>>> my_dict = {'a': 'b', 'c': 'd', 'e': 'f'}
>>> keys = ['a', 'c', 'e']
>>> all(my_dict.get(k) == chr(ord(k) + 1) for k in keys)
True

使用map的類似方法,改編自上述答案:

>>> list(map(my_dict.get, keys)) == [chr(ord(k) + 1) for k in keys]
True

我會盡量提供我認為最容易理解和簡單的代碼:

if my_dict.get('a') == 'b' and my_dict.get('c') == 'd' and my_dict.get('e') == 'f':
  print('all keys exist and values are correct')
else:
  print('one of keys is not exist or value of at least one key is not correct')

my_dict.get(key_name)如果key_name不存在則返回None bdf不是None

關於get方法

您也可以捕獲錯誤:

try:
  if my_dict['a'] == 'b' and my_dict['c'] == 'd' and my_dict['e'] == 'f':
    print('all keys exist and values are correct')
  else:
    print('all keys exist but some of values are not correct')
except KeyError:
  print('some of keys are not exist')

它是如此基本但是......我想它應該在這里,因為它是基本的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM