我有一个钥匙列表['foo_a','foo_b','foo_c','fnord']
这里所有类似的解决方案都假定fnord
您的文本中没有 's。
我有这个代码可以完成这项工作:
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-fu 现在还不够强大。
我很想听听一些建议。
编辑. 附加背景和说明。
这些是其他开发人员放入应用程序中用于翻译的键。他们应该有一个共同的前缀,但人们忘记了,他们从其他代码中剪切和粘贴。“_”作为前缀分隔符只是一个约定。最好不要假设甚至使用了分隔符。70% 是一个完全任意的阈值。“最普遍”或“主要”也会起作用。
是的,这是 python 2.7,引号内的空格只是一个视觉伪影。