同时访问嵌套的dict键和值

时间:2014-05-05 07:22:49

标签: python optimization python-3.x dictionary

假设我有这个嵌套字典,如下所示。是否有一种pythonic方式同时迭代外部和内部字典的键和值?

我目前正在执行:

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

只是想知道是否有更好,更快的方法来做到这一点?使用字典理解,比正常方法更快的执行,节省内存等(当它应用于巨大的dicts时)更快?

{'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}}}

1 个答案:

答案 0 :(得分:2)

  • some_dict.items()是同时访问密钥和值的合适方法
  • 代码中的显式嵌套循环可能比CPython上相应的list / dict理解更快
  • Python 3上的
  • .items()没有创建列表。 dict的巨大程度并不重要:在迭代.items()
  • 时,内存使用量应保持不变

.items()在Python 3上返回a view。在迭代它们时,您不应该尝试更改outerouter_value词典。

如果您无法更改输入数据结构,那么您的代码就可以了。