【发布时间】:2016-01-25 10:19:36
【问题描述】:
我想创建一个字典,其中键是正则表达式:
d = {'a.*': some_value1, 'b.*': some_value2}
然后,当我查字典时:
d['apple']
我希望苹果'apple' 与正则表达式的键相匹配。如果与键/正则表达式完全匹配,则应返回相应的值。
例如'apple'与正则表达式'a.*'完全匹配,所以应该返回some_value1。
当然,所有这些都假设正则表达式键不冲突(即两个键不应该都完全匹配同一个字符串)。假设我可以在构建密钥时手动处理此要求。
这在 Python 中可行吗?如果是这样,那将是一个相当优雅和强大的构造!
【问题讨论】:
-
“如果是这样,那将是一个非常优雅/强大的构造!” - 不,它不会,因为你可以编写无限数量的正则表达式匹配相同的字符串。你没有问正确的问题。请说明您要解决的问题。
-
你想要两个不兼容的东西。一个程序不能确定一个正则表达式是否匹配一个字符串,至少需要同时查看正则表达式和字符串。给定一个 set 正则表达式(键)和一个字符串,知道哪个正则表达式匹配该字符串的唯一方法是尝试每个正则表达式。但是字典的性能完全取决于它找到匹配键的能力 不必遍历所有键。因此,即使您可以避免键中的所有歧义,其性能仍然不会比键值对列表好。
-
Re Tomalak 的评论:是的,请解释您要解决的问题。从表面上看,为了利用
dict的快速哈希表查找机制,您最好的选择是将键设置为字符串的第一个字符,即“a”、“b”。请您解释一下您希望从另一种安排中获得什么。
标签: python regex dictionary