python在大字典中使用key in dict.keys()的性能问题
我在想,大家能不能给我一些建议,让我的代码性能更好。
我有一组循环,主要是检查一个字典里是否有某个键。如果这个键存在,就把值加到对应的列表里;如果不存在,就为这个键新建一个列表。
dict={}
for value in value_list:
if value.key in dict.keys():
temp_list = dict[value.key]
temp_list.append(value.val)
dict[value.key] = temp_list
else:
dict[value.key] = [value.val]
现在这段代码运行得还不错,但随着字典里的内容越来越多,检查键的那部分代码就变得越来越麻烦了。
有没有更好的方法来实现这个功能呢?
谢谢,
Mike
5 个回答
4
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如说,当你在写代码时,可能会发现某个功能没有按照预期工作。这时候,你可能会去网上查找解决办法,比如在StackOverflow上提问或寻找答案。
在这些讨论中,大家会分享他们的经验和解决方案。有些人可能会提供代码示例,帮助你更好地理解问题所在。通过这些交流,你可以学到很多实用的技巧和知识,逐步提高自己的编程能力。
总之,编程的过程中遇到问题是很正常的,关键是要善于利用网络资源,向其他人请教,找到解决方案。
your_dict.setdefault(value.key, []).append(value.val)
4
使用 collections.defaultdict
,这可以简化为
d = collections.defaultdict(list)
for value in value_list:
d[value.key].append(value.val)
50
不要这样做:
value.key in dict.keys()
在Python 2中,这样做会创建一个包含所有键的列表。随着字典变大,这样的操作会变得越来越耗费资源,而且在这个列表中查找键的时间复杂度是O(n),这就失去了使用字典的意义。
相反,应该这样做:
value.key in dict
这样做不会创建一个临时的列表,而是通过哈希表直接查找键,而不是线性搜索。
setdefault
,在其他地方提到过,是更简洁的做法,但理解上面的内容非常重要。