3 回答

TA貢獻1811條經(jīng)驗 獲得超5個贊
您可以通過values并使用if條件:
for v in records.values():
pwd_secret = v.get('pwd_secret')
if pwd_secret == code:
# found
你真的不需要經(jīng)歷,items因為看起來你不需要鑰匙。
至于你的錯誤,是從分支ValueError中引發(fā)的,因為不等于. 如果您沒有預(yù)料到這一點,那么您應(yīng)該在編輯器中設(shè)置一個斷點并逐行遍歷您的代碼以查看實際發(fā)生的情況。elsepwd_secretcode
另一個更簡單的調(diào)試步驟是print找出每個值是什么:
for v in records.values():
pwd_secret = v.get('pwd_secret')
print(f"pwd secret: {pwd_secret} and code: {code}") # print values here
if pwd_secret == code:
print("Secret is valid!")
else:
raise ValueError("code is invalid")
如果在內(nèi)部字典中找不到,這也可能會指出v.get('pwd_secret')給你默認值。None'pwd_secret'
此外,如果您想檢查任何內(nèi)部詞典是否有代碼,您可以使用內(nèi)置函數(shù)any():
if any(v.get('pwd_secret') == code for v in records.values()):
print("Secret found!")
else:
raise ValueError("Secret not found")

TA貢獻1851條經(jīng)驗 獲得超3個贊
功能:
def check_value(dict_of_dicts, value):
return any(value in dict_.values() for dict_ in dict_of_dicts.values())
例子:
a = {
'first': {
"email": 'email',
"password": 'password',
"pwd_secret": None
},
'second': {
"email": 'email',
"password": 'password',
"pwd_secret": 'code'
}
}
check_value(a, 'code')
# True

TA貢獻1854條經(jīng)驗 獲得超8個贊
假設(shè)這本字典:
records = {
'first': {
"email": 1234,
"password": 1234,
"pwd_secret" : None
},
'second': {
"email": 1234,
"password": 1234,
"pwd_secret" : 'code'
}
}
和測試循環(huán):
for v in records.values():
if v['pwd_secret'] == 'code':
print('here...')
而不是該print()子句,只需放置您希望執(zhí)行的必要操作。換句話說-您的代碼應(yīng)該可以工作,問題可能不在于在嵌套字典中查找值。
添加回答
舉報