python:将字典与缺少项目的 return keyError 进行比较
python: Compare Dictionaries to return keyError on missing item
我正在尝试比较两个字典,期望的结果是一个 KeyError,它标识丢失的键。
这是我目前拥有的:
d1 = {'lion': 10.0}
d2 = {'lion': 10, 'tiger': 3}
def calc_test(d1, d2):
if set(d2) <= set(d1) == True:
pass
else:
raise KeyError(set(d2))
calc_test(d1,d2)
如果你运行虽然它给出了整个字典的输出:
KeyError: {'lion', 'tiger'}
我正在寻找的是只显示丢失密钥的输出:
KeyError: {'tiger'}
使用差分运算符,set(d2)-set(d1)
。
d1 = {'lion': 10.0}
d2 = {'lion': 10, 'tiger': 3}
def calc_test(d1, d2):
if set(d2) <= set(d1) == True:
pass
else:
raise KeyError(set(d2)-set(d1))
try:
calc_test(d1,d2)
except Exception as e:
print(e)
这将显示 d2
中不在 d1
中的键。
如果您使用集合,可以使用一个名为 symmetric_difference
的简单函数来查找两个集合中的不常见值。
set(d2).symmetric_difference(set(d1))
这会给你结果:
{'tiger'}
所以你可以这样修改你的函数:
d1 = {'lion': 10.0}
d2 = {'lion': 10, 'tiger': 3}
def calc_test(d1, d2):
uncommon_items = set(d2).symmetric_difference(set(d1))
if len(uncommon_items) > 0:
raise KeyError(uncommon_items)
calc_test(d1, d2)
尝试 difference
:
d1 = {'lion': 10.0}
d2 = {'lion': 10, 'tiger': 3}
def calc_test(d1, d2):
if set(d2) <= set(d1) == True:
pass
else:
raise KeyError(set(d2).difference(set(d1)))
calc_test(d1,d2)
只需检查 d2
中的键在 d1
中:
def calc_test(d1, d2):
s = []
for i in d2:
if i not in d1:
s.append(i)
if s:
raise(KeyError(s))
# Raises
KeyError: ['tiger']
请注意,如果 d1
中有一个不在 d2
中的键,这将不起作用
虽然它的长度更长,但它在时间上和 space 复杂度上都很高效。
我正在尝试比较两个字典,期望的结果是一个 KeyError,它标识丢失的键。
这是我目前拥有的:
d1 = {'lion': 10.0}
d2 = {'lion': 10, 'tiger': 3}
def calc_test(d1, d2):
if set(d2) <= set(d1) == True:
pass
else:
raise KeyError(set(d2))
calc_test(d1,d2)
如果你运行虽然它给出了整个字典的输出:
KeyError: {'lion', 'tiger'}
我正在寻找的是只显示丢失密钥的输出:
KeyError: {'tiger'}
使用差分运算符,set(d2)-set(d1)
。
d1 = {'lion': 10.0}
d2 = {'lion': 10, 'tiger': 3}
def calc_test(d1, d2):
if set(d2) <= set(d1) == True:
pass
else:
raise KeyError(set(d2)-set(d1))
try:
calc_test(d1,d2)
except Exception as e:
print(e)
这将显示 d2
中不在 d1
中的键。
如果您使用集合,可以使用一个名为 symmetric_difference
的简单函数来查找两个集合中的不常见值。
set(d2).symmetric_difference(set(d1))
这会给你结果:
{'tiger'}
所以你可以这样修改你的函数:
d1 = {'lion': 10.0}
d2 = {'lion': 10, 'tiger': 3}
def calc_test(d1, d2):
uncommon_items = set(d2).symmetric_difference(set(d1))
if len(uncommon_items) > 0:
raise KeyError(uncommon_items)
calc_test(d1, d2)
尝试 difference
:
d1 = {'lion': 10.0}
d2 = {'lion': 10, 'tiger': 3}
def calc_test(d1, d2):
if set(d2) <= set(d1) == True:
pass
else:
raise KeyError(set(d2).difference(set(d1)))
calc_test(d1,d2)
只需检查 d2
中的键在 d1
中:
def calc_test(d1, d2):
s = []
for i in d2:
if i not in d1:
s.append(i)
if s:
raise(KeyError(s))
# Raises
KeyError: ['tiger']
请注意,如果 d1
中有一个不在 d2
虽然它的长度更长,但它在时间上和 space 复杂度上都很高效。