我有一个键列表 ['foo_a','foo_b','foo_c','fnord']
所有类似的解决方案都假定您的文本中没有 fnord
。
我有一段可以完成任务的代码:
def detect_prefix(keys):
PCT = 0.70 # cutof
pre = ''
l = len(keys)
for i in range(0, len(max(keys, key=len))):
keys = filter(lambda k: k.startswith(pre), keys)
cnt = dict()
for k in map(lambda k: k[i], keys):
cnt.setdefault(k,0)
cnt[k] +=1
if cnt[max(cnt)] / float(l) >= PCT:
pre += max(cnt)
else:
break
return pre
我有一个强烈的怀疑,这个问题可以更优雅地解决,但是我的python技术还不够强。我很想听听一些建议。 编辑。 额外的背景和澄清。 这些是其他开发人员放在应用程序中供翻译使用的键。它们应该有一个共同的前缀,但人们会忘记并从其他代码中剪切和粘贴。 "_"作为前缀分隔符只是一种约定。最好不要假设分隔符被使用。70%的阈值完全是任意的。"最普遍"或"主导"也可以使用。 是Python 2.7,并且引号内的空格只是一个视觉效果。