Q
知道字典
19
A
回答
28
你將不得不改乘:
def depth(d, level=1):
if not isinstance(d, dict) or not d:
return level
return max(depth(d[k], level + 1) for k in d)
max()
是需要挑選備受矚目,在每個級別的當前字典中的最大深度,每個不同深度的3個鍵的字典應該反映在那個級別最大的深度。
演示:
>>> d = {'a':1, 'b': {'c':{}}}
>>> depth(d)
3
>>> d = {'foo': {'bar': {'baz': 0}, 'spam': {'ham': {'monty': 1}, 'eric': 'idle'}}, 'john': 'cleese'}
>>> depth(d)
5
+0
+1的一個警告:應無和{}返回1?但這是一個慣例。 –
+1
@lukas:該技術可以調整;這一點更多地表明瞭需要做的事情。這裏的關鍵是遞歸和使用'max()',我會說。 –
+0
水平的默認值應該是0而不是1.一個簡單的字典返回2作爲深度不正確。也爲None和空的字典,深度應該是0而不是1. –
16
你需要創建一個遞歸函數:
>>> def depth(d):
... if isinstance(d, dict):
... return 1 + (max(map(depth, d.values())) if d else 0)
... return 0
...
>>> d = {'a':1, 'b': {'c':{}}}
>>> depth(d)
3
4
非遞歸解決方案:
def depth(d):
depth=0
q = [(i, depth+1) for i in d.values() if isinstance(i, dict)]
max_depth = 0
while (q):
n, depth = q.pop()
max_depth = max(max_depth, depth)
q = q + [(i, depth+1) for i in n.values() if isinstance(i, dict)]
print max_depth
3
迭代求解:
from collections import deque
def depth(d):
q = deque([d])
q2 = deque()
max_depth = 0
while q:
curr_dict = q.popleft()
if isinstance(curr_dict, dict):
for di in curr_dict.itervalues():
q2.append(di)
if not q:
q, q2 = q2, q
max_depth += 1
return max_depth
print depth(None)
print depth({})
print depth({"a": "b"})
print depth({"a": "b", "c": {"d": "e"}, "f": {"g": "h"}, "i": {"j": "k"}, "x": {}, "z": {} })
print depth({'a':1, 'b': {'c':{}}})
print depth({'foo': {'bar': {'baz': 0}, 'spam': {'ham': {'monty': 1}, 'eric': 'idle'}}, 'john': 'cleese'})
相關問題
- 1. 有沒有預先知道字典
- 2. 你知道一個支持COW事務的C字典嗎?
- 3. 我不知道在Python中的打印功能關於字典
- 4. 如何知道Python有序字典中項目的位置
- 5. 獲取字典鍵值對不知道它的類型
- 6. UITableViewCell如何知道從數組或字典中加載的JSON
- 7. Swift:如果我知道密鑰,就可以獲取字典值
- 8. 查找字典值的類型,而無需知道鍵
- 9. 字典不區分大小寫,但不知道爲什麼
- 10. python如何知道對象屬性(方法)以及如何知道字典的層次結構
- 11. 如何知道有名字
- 12. 如何在不知道子字典名稱的情況下訪問嵌套字典
- 13. 字典未知大小 - 查找單詞是否在字典中
- 14. 如何知道字符的字符集?
- 15. Python的安全字典導航,正道
- 16. 我有眼淚,因爲我不知道如何使用Action初始化字典?
- 17. Mustache.js:大JSON字典和更小的知道條目列表隨機顯示onfly?
- 18. Python:如何知道兩個字典是否有相同的密鑰
- 19. 如何在不知道密鑰的情況下從字典中獲得價值?
- 20. Swift字典獲取值,但無法訪問或不知道密鑰
- 21. 解析JSON字典具有未知值
- 22. valueconverter在資源字典中的未知
- 23. 字典數據更改通知
- 24. 內容感知字典更新
- 25. 知道
- 26. 有沒有人知道經典ASP的語法檢查器?
- 27. 串字典,字典
- 28. LINQ字典字典
- 29. 想知道第一個字符CHARINDEX
- 30. 調用函數時不知道名字
它可能分支,或每層只有一個鍵? – mhlester
它只是你擔心的嵌套嵌套,或者字典是否有其他容器的值? – mgilson
我會成爲一個白癡說,你給的例子的(最直接的)答案是看看它。此外,我不能相信這不是重複的(但它似乎簽出!) – keyser