あなたはこれを処理するためにcollections.Counter
のcollections.defaultdict
を使用することができます。 defaultdict
は年の数でグループに日付範囲を使用し、Counter
は年のその数の範囲の文字列の数を追跡します:あなたが最も一般的な範囲の文字列を知りたい場合は
from collections import defaultdict, Counter
year_ranges = defaultdict(Counter)
s = '2004-2016; 1980-2016; 1991-2006; 2000-2012; 1998 - 2011; 2004-2016'
for start, end in [r.split('-') for r in s.split('; ')]:
start, end = int(start), int(end)
year_ranges[end-start].update(['{}-{}'.format(start, end)]) # update counter for normalised range string
>>> print(year_ranges)
defaultdict(<class 'collections.Counter'>, {36: Counter({'1980-2016': 1}), 12: Counter({'2004-2016': 1, '2000-2012': 1}), 13: Counter({'1998-2011': 1}), 15: Counter({'1991-2006': 1})})
年の範囲12:
>>> year_ranges[12].most_common(1)
[('2004-2016', 2)]
等しい年数の範囲を表す複数の範囲文字列があるケースをどのように処理するかはわかりません。
どのようにデータを読み込みますか? '['2004-2016'、 '1980-2016'、...]'のようなリストで? – Reti43
正確に何が助けを必要としますか?あなたは何を試していますか、どこに詰まっていますか?まだコードを書いていませんか? –