如何编写从字典中识别关键字的文本解析器逻辑?
How to write a text parser logic which identifies keywords from a dictionary?
如何制作一个简单的文本解析器来查找关键字并对其进行相应的分类。
例子:我有两个字典
A = {'1': 'USA', '2': 'Canada', '3': 'Germany'}
B = {'t1': "The temp in USA is x", 't2': 'Germany is very cold now', 't3': 'Weather in Canada is good', 't4': 'USA is cold right now'}
现在我想找出 A
中的关键字是否出现在 B
中,结果应该是这样的。
Result = {'1': ('t1', 't4'), '2' : 't3', '3': 't2'}
我是一个初学者,得到这个的逻辑非常混乱。
你可以通过听写理解来做到这一点:
A = {'1': 'USA', '2': 'Canada', '3': 'Germany'}
B = {'t1': "The temp in USA is x", 't2': 'Germany is very cold now', 't3': 'Weather in Canada is good', 't4': 'USA is cold right now'}
{k: [k_b for k_b, v_b in B.items() if v in v_b.split()] for k, v in A.items()}
# {'1': ['t1', 't4'], '2': ['t3'], '3': ['t2']}
这使得字典中的每个值都是一个列表,而不是一些是集合而另一些是字符串。这几乎肯定比混合类型字典更容易使用。
如果您的字典会很大,您可能会通过反转 B
字典来提高一些性能,这样您就不需要每次都扫描每个值。
如果您想要显示的格式完全相同,您可以这样做。一个简单的循环,生成元组字典,然后使用字典理解重新格式化长度为 1 的元组。
Result = dict()
for ka, va in A.items():
Result[ka] = tuple(kb for kb,vb in B.items() if va in vb)
Result = {k: (v[0] if len(v) == 1 else v) for k,v in Result.items()}
print(Result)
如何制作一个简单的文本解析器来查找关键字并对其进行相应的分类。
例子:我有两个字典
A = {'1': 'USA', '2': 'Canada', '3': 'Germany'}
B = {'t1': "The temp in USA is x", 't2': 'Germany is very cold now', 't3': 'Weather in Canada is good', 't4': 'USA is cold right now'}
现在我想找出 A
中的关键字是否出现在 B
中,结果应该是这样的。
Result = {'1': ('t1', 't4'), '2' : 't3', '3': 't2'}
我是一个初学者,得到这个的逻辑非常混乱。
你可以通过听写理解来做到这一点:
A = {'1': 'USA', '2': 'Canada', '3': 'Germany'}
B = {'t1': "The temp in USA is x", 't2': 'Germany is very cold now', 't3': 'Weather in Canada is good', 't4': 'USA is cold right now'}
{k: [k_b for k_b, v_b in B.items() if v in v_b.split()] for k, v in A.items()}
# {'1': ['t1', 't4'], '2': ['t3'], '3': ['t2']}
这使得字典中的每个值都是一个列表,而不是一些是集合而另一些是字符串。这几乎肯定比混合类型字典更容易使用。
如果您的字典会很大,您可能会通过反转 B
字典来提高一些性能,这样您就不需要每次都扫描每个值。
如果您想要显示的格式完全相同,您可以这样做。一个简单的循环,生成元组字典,然后使用字典理解重新格式化长度为 1 的元组。
Result = dict()
for ka, va in A.items():
Result[ka] = tuple(kb for kb,vb in B.items() if va in vb)
Result = {k: (v[0] if len(v) == 1 else v) for k,v in Result.items()}
print(Result)