2013-10-30 36 views
0

我解析了大量文件,其中數據存儲在嵌套字典中。子文字的名稱可能因文件而異。另外,我想我可能需要考慮它們嵌套的不同長度。不過,我總是知道我需要訪問的字典的名稱。說,我有字跡:如何在不知道子字典名稱的情況下訪問嵌套字典

d = {'Unknown2': {'Unkw1': {'INeedYou': {'k': 'v'}}}} 
d2 = {'anotherkey': {'INeedYou': {'k': 'v'}}}} 

我總是需要挖掘到{'k': 'v'}。除了d['Unknown2']['Unkw1']['INeedYou']語法外,你能想出其他方式來訪問它嗎?

我想我可以使用d.keys()來獲得名稱並使用上面顯示的方法訪問感興趣的字典,但是由於嵌套可能很深,訪問我需要的字典需要重複很多次。

我以爲你們中的一些人可能會知道一些簡單的技巧來讓工作更容易完成。

回答

2

我懷疑你可以避免遍歷整個字典樹,直到找到你找到的密鑰。其基本思路是:

def findDict (d, keyName): 
    if not isinstance (d, dict): return None 
    if keyName in d: return d [keyName] 
    for subdict in d.values(): 
     r = findDict (subdict, keyName) 
     if r: return r 
+0

正是我所需要的。謝謝! – nutship

+0

很高興爲您提供幫助。請記住,這種方法是遞歸的,如果你有更多的嵌套級別比最大遞歸深度(一般爲500),這個函數將會完全失敗。如果你的字典確實有超過500個嵌套層次,你需要去函數化(序列化)這個函數。 – Hyperboreus

+0

500在這種情況下是很多。 – nutship