gpt4 book ai didi

python - 如何在嵌套的 for 循环中检查 dict 和列表中项目的成员资格?

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:04 24 4
gpt4 key购买 nike

试图完成这项工作让我头晕目眩:
我有一个有序的字典:

OrderedDict([('key', {'keyword': {'blue', 'yellow'}), ('key1', {'keyword': {'lock', 'door'})])

我有一个 potential_matches 列表:[red, blue, one]

我想将这些潜在匹配排序到两个列表之一:
正确 = []不正确 = []

如果潜在匹配是字典中某个键的关键字,则它进入正确,否则进入不正确

这个例子的结果应该是:
正确 = [blue]不正确 = [red, one]

这是我尝试过的:

correct = []  
incorrect = []
for word in potential_matches:
for key, value in ordered_dict.items():
if word in value["keyword"] and word not in correct:
correct.append(word)
elif word not in value["keyword"] and word not in correct and word not in incorrect:
incorrect.append(word)

列表不能有重叠并且必须有唯一的项目,这就是为什么在 elif 中有这么多检查的原因。 它很接近,但最终发生的是不正确的列表仍然会有来自正确列表的项目。

我怎样才能尽可能有效地解决这个问题?

我让它听起来有点复杂,但本质上,所有不匹配的剩余单词都应该简单地转到另一个列表。不过,我认为这需要完整地运行 potential_match 列表和字典......

最佳答案

当我运行它时你的逻辑工作正常,所以可能有一些你没有提供的逻辑导致错误。

但是,由于您正在处理唯一项目的集合,因此使用 set 而不是 list 可以更有效地实现您的逻辑。

此外,不要循环遍历 potential_matches,而是循环遍历您的字典并将项目添加到 正确的 集中。这将您的复杂性从 O(m * n) 降低到 O(n),即最低级别字典值中的元素数量。

然后,在最后,使用set.difference,或语法糖-,来计算不正确的集合。这是一个演示:

from collections import OrderedDict

d = OrderedDict([('key', {'keyword': {'blue', 'yellow'}}),
('key1', {'keyword': {'lock', 'door'}})])

potential_matches = {'red', 'blue', 'one'}

correct = set()
for v in d.values():
for w in v['keyword']:
if w in potential_matches:
correct.add(w)

incorrect = potential_matches - correct

结果:

print(correct, incorrect, sep='\n')

{'blue'}
{'one', 'red'}

通过 set 理解可以实现更高效的版本:

potential_matches = {'red', 'blue', 'one'}
correct = {w for v in d.values() for w in v['keyword'] if w in potential_matches}
incorrect = potential_matches - correct

请注意,嵌套集合理解的结构与冗长的嵌套 for 循环的编写方式一致。

关于python - 如何在嵌套的 for 循环中检查 dict 和列表中项目的成员资格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51963134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com