【发布时间】:2012-08-12 12:28:05
【问题描述】:
我正在编写一些涉及类似这样的 Python 代码
values = {}
for element in iterable:
values.setdefault(element.name, []).append(element)
因为我之前可以对输入进行排序,所以我也是这样实现的
values = {}
cur_name = None
cur_list = None
for element in iterable:
if element.name != cur_name:
values[cur_name] = cur_list
cur_name = element.name
cur_list = []
cur_list.append(element)
if cur_list:
values[cur_name] = cur_list
del values[None]
这里的输入已经按element.name排序。
第二种方法比第一种方法快得多,而且使用的内存也更少。
这是什么原因?
还是我在第二种方法中犯了某种错误?
【问题讨论】:
-
setdefault是标准字典的完美方法。它不能使用“更多内存”。它只是在其字典上执行。这是你的问题吗? -
@lazyr 是的,它们是按
element.name排序的。 -
嗨,我还测试了(修改过的)变体,没有来自 Ashwini Chaudhary 答案的 setdefault,它也比你的 setdefault 更快! gist.github.com/3368186
标签: python memory dictionary setdefault