说我有一个命令字典:
import collections
collections.OrderedDict([('great_key', {'keyword': {'blue', 'yellow'}}), ('super_key', {'keyword': {'lock', 'door'}})])
和potential_matches
的列表:[red, red, blue, one]
我需要填写两个列表:
correct_key = []
或incorrect_match = []
如果潜在匹配项是字典中某个键之一的关键字,则其键位于correct_key
中,否则单词位于incorrect_match
中。
此示例的结果应为:
correct_key = [great_key]
,incorrect_match = [red, 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)
这不起作用,而且似乎也不有效。
它不能是必须保留订单的副本集,并且重复项以及列表中的多个项都很好。
不应一眼看到比赛就返回它,因为作为比赛的dict的所有项目都应该在最终列表中。
从本质上讲,所有不匹配的其余单词都应简单地转到另一个列表。
最有效(最易读)的方法是什么?
注意:我之前曾问过类似的问题,尽管在这种情况下,情况和答案都要求使用python集,因为项目是唯一的,或者是关键字而不是关键字。
答案 0 :(得分:0)
基于您的代码运行,我相信没有匹配项。
>>> for key in f:
... print(f[key])
...
{'keywords': {'blue', 'yellow'}}
{'keywords': {'door', 'lock'}}
然后:
>>> for key in f:
... v = f[key]
... for b in v:
... print(v[b])
...
{'blue', 'yellow'}
{'door', 'lock'}
>>> for key in f:
... for b in v:
... for c in v[b]:
... print(c)
...
door
lock
door
lock
问题是您两次使用关键字。在第二个迭代中将keywords
更改为keywords2
。