【发布时间】:2016-02-25 05:05:20
【问题描述】:
假设我有一个字典列表:
ls = [{'id': 1, 'a1': 2, 'a2': 3}, {'id':2, 'a2':4}, {'id':3, 'a2':5}]
a1 在某些字典中不存在
我想在缺少a1 的这些字典中将a1 设置为0,并将所有字典中的键名a1 更改为b1。这是我想出的代码
for l in ls:
l.setdefault('a1', 0)
l['b1'] = l.pop('a1')
我想知道是否可以提高效率,因为我需要运行这段代码数百万次。任何改进将不胜感激。
【问题讨论】:
-
为什么不直接使用代码:
l.setdefault('b1', l.pop('a1') if 'a1' in l else 0) -
在我的旧笔记本上,在包含一百万个字典的列表上运行您的代码只需要半秒钟。如果您的代码执行除此之外的任何其他操作,那么它似乎不太可能成为瓶颈。寻找更优雅的代码可能很有趣,但我不会担心这种规模的效率。
-
@DSM,我将在只有 1cpu 和 0.5G RAM 的 VPS 上运行它。每个列表将有数百个到 10k 的字典,我有数千万个这样的列表要运行。假设我有 1000 万个列表,不知何故我可以节省 0.01 秒,这将为我节省 27.78 小时。因此,任何改进都可能意义重大。
-
@Harrison:根据
timeit模块的结果,我的答案中的解决方案应该提供大约 20% 的改进。
标签: python dictionary