如何有效地比较字典中的字符串列表与Python中的另一个字典列表?
我想将字典中的字符串列表与Python中的另一个字典列表进行比较。如果如何有效地比较字典中的字符串列表与Python中的另一个字典列表?,python,list,performance,dictionary,for-loop,Python,List,Performance,Dictionary,For Loop,我想将字典中的字符串列表与Python中的另一个字典列表进行比较。如果次要列表中的href在主列表中不可用,则href将被追加到主列表中 基于此需求,实现了以下代码 main_list = [ {'href': 'red'}, {'href': 'yellow'}, {'href': 'yellow'}, ] secondary_list = [ {'href': 'yellow'}, {'href': 'redf'}, {'href': 'bl
次要列表中的href
在主列表中不可用,则href
将被追加到主列表中
基于此需求,实现了以下代码
main_list = [
{'href': 'red'},
{'href': 'yellow'},
{'href': 'yellow'},
]
secondary_list = [
{'href': 'yellow'},
{'href': 'redf'},
{'href': 'blue'},
]
for g in secondary_list:
if not any(d.get('href', None) == g["href"] for d in main_list):
main_list.append({'href': g["href"]})
但是,假设我们在两个字典中都有一个非常大的列表,那么使用两个for循环的实现可能效率低下
我可以知道上面的代码是否可以更高效、更紧凑?更好的是,如果存在我不知道的包 您可以执行以下操作,O(n)
复杂性:
main_set = {frozenset(g.items()) for g in main_list}
secondary_set = {frozenset(g.items()) for g in secondary_list}
main_list.extend(dict(g) for g in secondary_set - main_set)
print(main_list)
输出
[{'href': 'red'}, {'href': 'yellow'}, {'href': 'yellow'}, {'href': 'blue'}, {'href': 'redf'}]
其思想是创建冻结字典集frozenset(g.items())
找出差异并转换回字典。您可以将其视为可哈希集
对于您的情况,尤其是单键字典,其中所有键都相同,您可以执行以下操作:
main_set = {v for d in main_list for v in d.values()}
secondary_set = {v for d in secondary_list for v in d.values()}
main_list.extend({"href": v} for v in (secondary_set - main_set))
print(main_list)
字典是否总是有一个单键href?对于这种特殊情况,通过将其简化为O(n)复杂度,只提供一个单键HREFinInteresting建议。我当时仍然没有大的dic,因此无法比较执行时间的差异。但是,稍后我将通过应用您提出的解决方案来更新速度增益。