我要检查字典列表中是否存在整个字典(键和值)。每个字典可以是字典和列表的嵌套字典。
当我有很多标量要检查每个标量是否存在于标量的目标列表中时,我通常将目标列表放入集合中并检查集合中的存在,例如scalar in set(list_of_scalars)
。 (请让我知道这是否不是执行此操作的最佳方法)
对于字典,我不能做my_dict in set(list_of_dicts)
,因为这样会引起unhashable type: 'dict'
。
如果存在相同的键名但值不同(我想要的是),那么执行my_dict in list_of_dicts
似乎可以正确返回False
,但是我担心运行时; python内部优化吗?我还能做什么?
编辑:假设我将执行许多查找,并使用Python3.7
答案 0 :(得分:3)
要检查标量列表中是否存在标量,通常将列表放入集合中并检查集合中的存在,例如set(list_of_scalars)中的标量。 (请让我知道这是否不是执行此操作的最佳方法)
集合的创建将是O(n)操作。该集合中的每个后续查找将是O(1)平均情况,因此,如果您计划执行多次查找,则值得。否则,如果仅执行一次查找,则最好在列表中执行线性搜索(假设其未排序)。
对于字典,我无法在set(list_of_dicts)中执行my_dict,因为 引发不可散列的类型:“ dict”。但是list_of_dicts中的my_dict运行 很好,但是我担心运行时;
如果您需要重复执行此查找,则根据存储在这些词典中的内容的性质,您可能需要重新考虑使用词典,而是选择对象。然后,您可以为对象定义def weekday_job(x, t=None):
week = datetime.today().weekday()
if t is not None and week < 5:
schedule.every().day.at(t).do(x)
weekday_job(main, '01:00')
weekday_job(main, '02:00')
while True:
schedule.run_pending()
time.sleep(60)
方法并将它们存储在一组中,查找将变得更加容易。
python是否在内部进行优化?我还能做什么?
您可以在此处查看使用Python数据结构进行操作的时间复杂度:TimeComplexity。 Python无法优化通用列表中的通用搜索,它将使用线性搜索行为(O(n))。
答案 1 :(得分:0)
要优化多个查找,您可以create a hashable dictionary class并搜索一组可哈希的字典:
l = [{1:2,3:4}, {5:6,7:8}]
setofdicts = set(map(hashabledict, l))
hashabledict({5:6,7:8}) in setofdicts
#True