【发布时间】:2018-05-14 21:36:13
【问题描述】:
我有一本字典,
stringToListDict = {'foo' : [], 'bar' : []}
现在假设我们这样做了
+foofoo
stringToListDict = {'foo' : ['foofoo'], 'bar' : []}
+条形条
stringToListDict = {'foo' : ['foofoo'], 'bar' : ['barbar']}
+foobarbar
stringToListDict = {'foo' : ['foofoo', 'foobarbar'], 'bar' : ['barbar']}
+notMatchingAnyKey
Simply discard this new string.
如您所见,添加的字符串通过匹配键作为前缀进行。
我可以通过一个一个地遍历字典中的每个键来做到这一点,直到我得到一个匹配的前缀。但是还有其他优雅或有效的方法吗?您不必担心边缘情况,例如:
stringToListDict = {'foo' : ['foofoo'], 'foobar' : [], 'bar' : ['barbar']}
then +foobarbar
仅供参考,这不是作业。
【问题讨论】:
-
等等,匹配条件是什么?前 3 个字母?
-
完整的密钥必须匹配。任何一位。在我的场景中没有发生碰撞的情况,所以不必担心 foo 和 foobar 键。键和输入字符串可以是任意长度。
-
对不起,你让我感到困惑。
+foofoo在代码中是什么意思?你能给我们看看吗? -
+foofoo 表示您正在尝试将此字符串放在字典下的最佳匹配键中。就像在以“An”为前缀的页面上一样,您应该会看到以“An”开头的“Ant”、“And”、“Analog”等词。
-
如果您使用的是字典,那么是的,这里唯一的选择是迭代所有键,例如
for k, v in d.items(): if s.startswith(k): v.append(s)。不同的数据结构,如搜索树或树,可以使这更有效(对数时间而不是线性时间),尽管它不会更简单(因为字典已经很简单了使用)。
标签: python algorithm dictionary optimization