python - Python优化字典迭代
问题描述
我有一个问题,我正在运行一个庞大的嵌套字典,并且希望加快速度,因为浏览整个字典所需的时间大约是一周的处理时间。是否有更快的方法来迭代以下内容(我不反对重新设计结构)?我需要迭代而不是矢量化,因为 2 的状态取决于 1 中发生的情况。
我正在嵌套,就像结构基本上在下面发生的那样
def function(x):
return 1
d = {'1': {'1a': 0, '1b': 0}, '2': {'2a': 0, '2b': 0, '2c': 0 } , '3': {'3a':0}}
s = {}
for outer_key, inner_dict in d.iteritems():
for inner_key, inner_value in inner_dict.iteritems():
s = function(inner_value)
print(s)
解决方案
我假设通过'迭代'你的意思是你遍历外部字典中的每个键,然后遍历返回的内部字典中的每个键。
当您以这种方式与字典交互时,您实际上将它们视为链表(或在本例中,视为嵌套的、不规则的列表)。遍历单个列表会产生 的运行时间O(n)
,嵌套列表以O(n * n) = O(n^2)
;结尾。如果此结构非常大,这将导致您遇到的大型运行时。
此外,您需要考虑对子字典的每个成员执行的操作。如果您正在执行某种通过先前字典返回并调整它们等的处理,则您的运行时可能会更糟(for
一旦获得子键,请考虑嵌套循环操作)。
我会质疑为什么您需要在字典的两个层次结构中点击每个键,因为使用字典的主要优点是在您知道特定键并需要找到其关联值的情况下。
您提到嵌套字典的状态取决于先前字典的状态。为什么不使用字典树(如果您需要在嵌套结构中进行恒定时间查找)而不是嵌套字典?树将允许您维护子字典之间的意外情况,如果您发现实际上不需要点击每个节点,遍历树可以为您带来一些运行时收益。
随时澄清您在整个过程中到底在做什么,我可以更新我的答案以更具体地满足您的需求!
推荐阅读
- forms - MS Access 表>查询>表单设计问题
- sql - SQL 80% 的离散分布百分位
- ffmpeg - 如何将爱奇艺的 JSON 转换为常规 m3u8
- jupyter-notebook - Huggingface BertForMaskedLM 在 90 多次迭代后失败
- c++ - 为什么cuda内核可以访问主机内存?
- express - Expressjs 收听后发送内容
- python - 为什么 os.stat().st_size 为 dir 返回 0?
- javascript - 将 2d 文本剪辑到 3d 对象 WebGl
- amazon-web-services - 私有子网中具有公共 IP 的实例可以接收互联网流量吗?
- python - Python:试图抓取 Jumia 笔记本电脑网站