2014-05-05 67 views
0

假設我有如下的嵌套字典。是否有一種pythonic的方式迭代外部和內部字典的鍵和值同時?同時訪問嵌套的字典鍵和值

我目前執行:

for outer_key, outer_value in outer.items(): 
    for inner_key, inner_value in outer_value.items(): 
     #my required processing 

只是想知道是否有這樣做更好,更快的方式?在使用詞典理解,比普通方法更快的執行速度,內存節省等(當它應用於巨大的字典)時更快?

{'68299-6030-885-42-4-54603-20645-15734': {'0-0-0-0-0-0-0-0': {'service_latency': 9.815000000000001, 
                   'service_cost': 58.78,  
                   'service_bandwidth': 247.36}}, 
'68299-6030-885-431-43303-80233-26504-15734': {'0-0-0-0-0-0-0-0': {'service_latency': 10.706, 
                    'service_cost': 50.06, 
                    'service_bandwidth': 362.88}}, 
'68299-6030-885-42-79805-13540-5668-15734': {'0-0-0-0-0-0-0-0': {'service_latency': 12.66, 
                    'service_cost': 75.19, 
                    'service_bandwidth': 707.74}}, 
'68299-6030-90241-3290-2033-5668-15734': {}, 
'68299-73365-46658-104-10-6685-29853-44799': {'0-0-0-0-0-0-0-0': {'service_latency': 12.427, 
                    'service_cost': 44.949999999999996, 
                    'service_bandwidth': 232.89}}} 
+3

我會說這是pythonic的方式!你爲什麼問這個問題?你有性能問題嗎? – jonrsharpe

+0

@jonrsharpe:並不是真的,但是因爲我在一些本身有多個嵌套循環的代碼中間使用它,所以我只是想確保我做得正確並且完全沒有遺漏任何東西。 – adwaraki

回答

2
  • some_dict.items()是適當的方法來獲得訪問鍵和值同時
  • 在代碼中明確嵌套的循環可能會比對應的列表/字典內涵快上CPython的
  • .items()上的Python 3不創建列表。它並沒有多麼巨大你dict是:當你迭代.items()內存使用量應該是恆定的

.items()回報a view關於Python 3.你不應該試圖在遍歷他們改變outerouter_value字典。

如果你不能改變輸入數據結構,你的代碼就好了。