簡體   English   中英

如何檢查python字典內的內部字典中是否存在鍵?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM