检查多个字典键是否匹配的最python的方法是什么?



假设我有一个字典my_dict

检查my_dict['a'] == 'b' and my_dict['c'] == 'd' and my_dict['e'] == 'f'的最python的方法是什么?

我不希望它抛出任何异常,如果键a,ce不存在于my_dict

可以用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的代码点比a高一个,例如

>>> 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)返回None,如果key_name不存在。b,d,f不是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')

它是如此基本,但是…我想它应该在这里因为它是基本的

相关内容

  • 没有找到相关文章