【发布时间】:2011-10-26 07:53:18
【问题描述】:
我有一个dict,它具有我不知道其确切值的字符串类型键(因为它们是在其他地方动态生成的)。但是,我知道我想要的键包含一个特定的子字符串,并且带有该子字符串的单个键肯定在字典中。
检索此键的值的最佳或“最 Pythonic”的方法是什么?
我想到了两种策略,但都让我感到厌烦:
for k,v in some_dict.items():
if 'substring' in k:
value = v
break
-- 或者--
value = [v for (k,v) in some_dict.items() if 'substring' in k][0]
第一种方法体积庞大且有些丑陋,而第二种方法更简洁,但是索引到列表理解的额外步骤([0])让我很恼火。有没有更好的方式来表达第二个版本,或者更简洁的方式来编写第一个版本?
【问题讨论】:
-
与大多数其他语言相比,它们看起来都非常简洁。但我认为第一个更具可读性。
-
为什么知道子串?你有更多的信息吗?您可以对字典进行某种解析/转换吗?你会在同一个字典上做很多类似的查找吗?
-
你应该试试
k.startswith('substring')或k.endswith('substring'),如果它在开头或结尾;它们可能会更快。 -
如果查找所有您拥有的
some_dict的内容,那么它完全没用,列表会更好。如果您有要匹配的子字符串列表,则时间复杂度为 O(N**2)。您需要对键进行索引才能有效地执行此操作,但像 Sphinx 这样的全文搜索引擎基本上可以做到这一点。 -
first method is bulky and somewhat ugly, while the second is cleaner这里的小评论:第二个不干净,它只是少了\n字符。有一些奇怪的信念认为单行代码工作得更快并且更具可读性。他们不是。
标签: python dictionary key substring