我正在嘗試將兩個字典與所需的結果進行比較,即 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'}
我正在尋找的是一個只顯示缺失鍵的輸出:
鍵錯誤:{'老虎'}
uj5u.com熱心網友回復:
嘗試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)
uj5u.com熱心網友回復:
如果您使用集合,則呼叫一個簡單的函式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)
uj5u.com熱心網友回復:
只需檢查其中的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
雖然它的長度更大,但它在時間和空間復雜性方面是有效的。
uj5u.com熱心網友回復:
使用差分運算子,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。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471991.html
標籤:Python python-3.x 字典
