问题描述
我想从Python字典中过滤掉一些元素。哪种方法更可取?我的字典很大...
下面是具有较小数据集的示例代码:
d = {0: 0,1: 2,2: 4,3: 6,4: 8,5: 10}
第一
d = {i:v for i,v in d.items() if i%2 == 0}
第二
list_to_del = []
for i in d.keys():
if i%2 == 0:
list_to_del.append(d)
for i in list_to_del:
del d[i]
list_to_del.clear()
在第一种情况下是否存在内存泄漏的风险?
解决方法
老实说,您的第一个看起来完全是我会做的。但是,如果确实需要遍历条目并进行过滤,请尝试将其保留为迭代器形式。
entries = filter(lambda x: x[1] % 2 == 0,d.items())
,
第一个更快。 .append()
的运行速度很慢,因此,第二个答案中的第一个for循环所需的时间要比对元素的终止要长。