所以我有一个工作岗位的法令,每个人都拿着一个法令
{
"hacker": {"crime": "high"},
"mugger": {"crime": "high", "morals": "low"},
"office drone": {"work_drive": "high", "tolerance": "high"},
"farmer": {"work_drive": "high"},
}
我还有大约21000个不同的工作要做
我怎样才能更快地浏览它们呢?
是否有任何类型的数据结构,使这更快,更好地通过扫描?如查找表的每一个标签?
我用的是python 3.10.4
注意:如果有帮助的话,所有的东西都在运行时开始加载,并且在运行时期间根本不改变
下面是我当前的代码:
test_data = {
"hacker": {"crime": "high"},
"mugger": {"crime": "high", "morals": "low"},
"shop_owner": {"crime": "high", "morals": "high"},
"office_drone": {"work_drive": "high", "tolerance": "high"},
"farmer": {"work_drive": "high"},
}
class NULL: pass
class Conditional(object):
def __init__(self, data):
self.dataset = data
def find(self, *target, **tags):
dataset = self.dataset.items()
if target:
dataset = (
(entry, data) for entry, data in dataset
if all( (t in data) for t in target)
)
if tags:
return [
entry for entry, data in dataset
if all(
(data.get(tag, NULL) == val) for tag, val in tags.items()
)
]
else:
return [data[0] for data in dataset]
jobs = Conditional(test_data)
print(jobs.find(work_drive="high"))
>>> ['office_drone', 'farmer']
print(jobs.find("crime"))
>>> ['hacker', 'mugger', 'shop_owner']
print(jobs.find("crime", "morals"))
>>> ['mugger', 'shop_owner']
print(jobs.find("crime", morals="high"))
>>> ['shop_owner']
2条答案
按热度按时间ego6inou1#
有没有什么类型的数据结构可以使扫描更快更好?
对,而且叫dict =)
只需将您的dict转换为两个字典,一个按标签,另一个按标签和标签值,其中将包含集合:
然后使用它们搜索所需的集合并返回所有集合中存在的作业。
hkmswyz62#
当在字典中查找第一级时,可以使用
my_dict[key]
或my_dict.get(key)
(它们做同样的事情),所以我认为您只需要使用target
查找即可。然后,如果你想查找哪些作业包含了关于某个标签的任何内容,那么我认为为此是的一个查找字典是合理的,你可以制作一个字典,其中每个键都Map到这些作业的列表。
下面的代码将在开始时运行一次,并基于
test_data
进行查找。它循环遍历整个字典,每当在项目的值中遇到tag
时,它都会将其中的键添加到该标记的作业列表中输出(
lookup
):使用此查找表,您可以使用
lookup['crime']
询问“哪些作业具有犯罪统计信息?”,这将输出['hacker', 'mugger', 'shop_owner']