python - 如果键值的值是单独列表的成员,则无法有效地从字典中提取键
问题描述
假设我有一个有序的字典:
import collections
collections.OrderedDict([('great_key', {'keyword': {'blue', 'yellow'}}), ('super_key', {'keyword': {'lock', 'door'}})])
和一个列表potential_matches
:[red, red, blue, one]
我需要填充两个列表:
correct_key = []
或incorrect_match = []
如果潜在匹配是字典中某个键的关键字,则其键为 in correct_key
,否则该词为 in 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)
这不起作用,而且似乎也没有效率。
它不能是一个集合 bc 它需要保留顺序,并且可以重复,以及列表中的多个项目。
它不应该在第一眼看到匹配就返回,因为匹配的 dict 的所有项目都应该在最终列表中。
本质上,所有剩余的不匹配的单词应该简单地转到另一个列表。
完成这项工作的最有效(和可读)的方法是什么?
注意:我之前问过类似的问题,尽管在这些情况下,情况和答案需要使用 python 集,因为项目是唯一的,或者是关键字而不是键。
解决方案
基于运行您的代码,我相信没有匹配项。
>>> 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
。
推荐阅读
- flutter - 将按钮放在容器底部的颤动中
- sorting - 根据嵌套值之一对地图进行排序
- python - 计算两个 Discord ID/雪花之间的时间差
- python - 如何通过更改两个变量(列)来替代 python 中的 excel 求解器来最小化错误项?
- python - 基类为抽象时调用基类ctor时出现pylint错误
- javascript - Telerik radcombobox 取消选择 OnClientCheckAllChecked 上的禁用项目
- python - 学习 Python 3 的艰难方式 Ex.23 - powershell 中未显示的字符
- android - Firebase 实时数据库中的子键问题仅在发布版本中
- javascript - 如何通过富文本编辑器使用 JavaScript 和 PHP 将带有编码 HTML 标签的数据插入数据库?
- excel - 如何添加第三个条件 .find