【问题标题】:Accessing nested dict keys and values simultaneously同时访问嵌套的dict键和值
【发布时间】:2014-06-21 10:20:36
【问题描述】:

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

我目前正在执行:

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

【问题讨论】:

  • 我会说这是pythonic的方式!你为什么问这个问题;你有性能问题吗?
  • @jonrsharpe :不是真的,但由于我在一些本身有多个嵌套循环的代码中间使用它,我只是想确保我做对了,没有完全遗漏任何东西.

标签: python optimization python-3.x dictionary


【解决方案1】:
  • some_dict.items() 是同时访问键和值的合适方法
  • 代码中的显式嵌套循环可能比 CPython 上相应的列表/字典理解更快
  • Python 3 上的 .items() 不会创建列表。你的dict 有多大并不重要:当你迭代.items() 时,内存使用应该是恒定的

.items() 在 Python 3 上返回 a view。您不应该在迭代时尝试更改 outer、outer_value 字典。

如果您无法更改输入数据结构,您的代码就可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多