[英]How to check if a key exists in an inner dictionary inside a dictionary in python?
有一個python字典:
a = {b:{c:{"x":1, "y":2, "z":3}}}
我想知道a[b][c]["z"]
存在,但我不知道a[b][c]
或a[b]
存在。
所以,如果我這樣做:
if "z" in a[b][c]:
我可能會收到"key c doesn't exist in a[b]"
"key b doesn't exist in a"
"key c doesn't exist in a[b]"
或"key b doesn't exist in a"
"key c doesn't exist in a[b]"
"key b doesn't exist in a"
錯誤。
在這種情況下,如何正確檢查z是否存在於a [b] [c]中?
蟒蛇的方式是根本不打擾檢查。
try:
value = a[b][c]["z"]
# do something with value
except KeyError:
print 'Sorry wrong key'
在這里,字典中可能缺少a,b,“ z”的任何組合,但它們都將被異常處理程序捕獲。 OTH,確切密鑰存在的情況將導致其余代碼被執行。
您可能還需要考慮使用defaultdict
第一個參數提供default_factory屬性的初始值; 它默認為無。 其余所有參數(包括關鍵字參數)的處理方式與傳遞給dict構造函數的方式相同。
這樣可以保證,像a[b][c]["z"]
這樣的符號將始終無錯誤地執行,並且在某些情況下可能很有用,尤其是在您嘗試避免使用重復代碼的情況下。
如果由於某種原因而不能使用異常(例如,lambda函數,列表理解,生成器表達式等)
value = a.get(b, {}).get(c, {}).get("z", None)
但是通常您應該更喜歡使用異常處理程序
為什么不使用自己的函數,它給您帶來靈活性,遞歸!
def _finditem(obj, key):
if key in obj: return obj[key]
for k, v in obj.items():
if isinstance(v,dict):
item = _finditem(v, key)
if item is not None:
return item
當然,如果任何詞典中都None
值,那將失敗。 在這種情況下,您可以為此函數設置一個哨兵object()
,並在找不到任何東西的情況下將其返回-然后,您可以檢查該sentinel
以了解是否找到了任何東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.