如果我有一個字典,d和我想檢查一個值d['e']['foo']['bar']
其中e和foo是字典,並且bar給出一個字符串什麼是一種方法安全地獲得該位置的價值?除了嘗試抓住之外還有什麼?如何安全地檢查一個Python字典是否有遞歸存儲的多個密鑰字典對
0
A
回答
3
一個好方法是使用reduce
。
d={'e':{'foo':{'bar':"final value"}}}
l=['e','foo','bar']
print reduce(lambda x,y:x.get(y),l, d)
,您可以撥打function
並傳遞list
給它。
輸出:final value
0
確保鑰匙在此快譯通,你可以試試這個:
if "e" in d:
print d["e"]
或者嘗試使用get方法,如果密鑰不可然後返回默認值。
如果鍵在字典中,則返回鍵的值,否則爲默認值。如果 默認沒有給出,則默認爲無,所以,這種方法從未 拋出一個KeyError。
d.get("e","default value")
1
使用get
有一個空的字典的默認:
>>> d = {'e':{'foo':{'bar':0}}}
>>> print(d.get('e', {}).get('foo', {}).get('bar'))
0
>>> print(d.get('f', {}).get('doo', {}).get('car'))
None
>>> print(d.get('e', {}).get('foo', {}).get('car'))
None
>>> print(d.get('e', {}).get('doo', {}).get('bar'))
None
+0
我正在嘗試避免長鏈。但是這在技術上會起作用。 – Bren
1
一種方法是沿着這些線路使用一個簡單的輔助功能:
def dive(d, *ks):
for k in ks:
if isinstance(d, dict) and k in d:
d = d[k]
else:
return None
return d
examples = [
{},
{'e': {'foo': 12}},
{'e': {'foo': {'bar': 999}}},
]
for i, e in enumerate(examples):
print(i, dive(e, 'e', 'foo', 'bar'))
輸出:
(0, None)
(1, None)
(2, 999)
相關問題
- 1. 如何檢查Python字典中是否存在多個鍵?
- 2. 檢查一對密鑰是否已經在字典中有一個值?
- 3. 如何檢查字典是否有不需要的密鑰?
- 4. 如何在一次傳遞中檢查KeyError的多個字典密鑰?
- 5. 檢查字典是否是另一個字典的子集
- 6. Python:字典值指針是否存儲密鑰?
- 7. Python:檢查一個變量是否是一個字典
- 8. 檢查字典中是否至少包含一個字典
- 9. python:重寫基於單獨字典的單個字典密鑰
- 10. Python從字典中刪除密鑰它是一個數字
- 11. 檢查字典是否有密鑰的時間複雜度是多少?
- 12. 檢查一個字典中的值是否包含另一個字典
- 13. 檢查字典對一個字
- 14. 在Python中爲每個密鑰存儲最多5個值字典
- 15. Python:如何知道兩個字典是否有相同的密鑰
- 16. 檢查一個特定的密鑰在一個字典中的值是什麼
- 17. 檢查字典中是否存在密鑰。如果沒有,附加它
- 18. 如何在密鑰存儲在另一個對象中時訪問字典值?
- 19. 具有多個值的Python字典密鑰
- 20. 嵌套字典 - 針對個人密鑰
- 21. 如何檢查本地存儲中的密鑰是否有值?
- 22. 存儲在一個Python字典
- 23. 檢查返回的字典密鑰是否導致列表
- 24. 計算多少個字典中有多個值的密鑰
- 25. 建立一箇舊的字典?字典遞歸幫助
- 26. 遞歸地通過字典
- 27. 遞歸字典創建python
- 28. 在具有相同密鑰的字典中合併兩個Python字典
- 29. 檢查存儲在字典中的參數是否有效
- 30. 未檢查靜態字典中的密鑰是否存在線程安全? ReSharper的認爲這是不
你可以嘗試使用'collections.defaultdict()單曲。見http://stackoverflow.com/questions/5029934/python-defaultdict-of-defaultdict – synchronizer
@synchronizer,然後只檢查值是一個「真正的」一個或沒有。謝謝! – Bren
可以肯定的是,我正在編寫一個快速程序來驗證我所說的內容。 – synchronizer