おそらく@Marcinのソリューションほど良くはありませんが、使用itertools.groupby
すると読みやすく柔軟になる可能性があります。
from itertools import groupby
def group_by_startswith(it, n):
"""Get a dict mapping the first n characters to the number of matches."""
def first_n(str_):
return str_[:n]
startswith_sorted = sorted(it, key=first_n)
groups = groupby(startswith_sorted, key=first_n)
return {key: len(list(grouped)) for key, grouped in groups}
出力例:
>>> list1 = ["1thing", "2thing", "3thing", "1thing"]
>>> print(group_by_startswith(list1, 3))
{'3th': 1, '2th': 1, '1th': 2}
このソリューションにより、結果の柔軟性が少し向上します。たとえば、return 行を return grouped
orに変更するlist(grouped)
と、一致するオブジェクトを簡単に取得できます。