Jul-12-2019, 06:13 AM
I did this in 15 minutes to wake up..
Output:andre@andre-GP70-2PE:~$ python by_version.py
{(2, 4): ['python2.4.1-foo.gz'],
(3, 4): ['python3.4.0-foo.gz',
'python-3.4.2-foo.gz',
'python-3.4.3-foo.gz',
'python-3.4.4-foo.gz',
'python-3.4.5-foo.gz',
'python-3.4.6-foo.gz',
'python-3.4.7-foo.gz',
'python-3.4.8-foo.gz',
'python-3.4.9-foo.gz',
'python-3.4.10foo.gz'],
(3, 5): ['python-3.5.0-foo.gz',
'python-3.5.1-foo.gz',
'python-3.5.2-foo.gz',
'python-3.5.3-foo.gz',
'python-3.5.4-foo.gz',
'python-3.5.5-foo.gz',
'python-3.5.6-foo.gz',
'python-3.5.7-foo.gz']}
import re from itertools import groupby from pprint import pprint pattern = re.compile(r'python-?(\d+)\.(\d+)\.(\d+)-?.+\.gz') def by_version(version_string): match = pattern.search(version_string) if match: return tuple(int(v) for v in match.groups()) else: return 0, 0, 0 def sort_by_major_minor(versions): sorted_versions = sorted(versions, key=by_version) result = {} for major_group, major in groupby(sorted_versions, key=lambda v: by_version(v)[0]): #print('Major', major_group) for minor_group, minor in groupby(major, key=lambda v: by_version(v)[1]): #print('Minor', minor_group) result[(major_group, minor_group)] = list(minor) return result lst = ['python3.4.0-foo.gz', 'python2.4.1-foo.gz', 'python-3.4.10foo.gz', 'python-3.4.2-foo.gz', 'python-3.4.3-foo.gz', 'python-3.4.4-foo.gz', 'python-3.4.5-foo.gz', 'python-3.4.6-foo.gz', 'python-3.4.7-foo.gz', 'python-3.4.8-foo.gz', 'python-3.4.9-foo.gz', 'python-3.5.0-foo.gz', 'python-3.5.1-foo.gz', 'python-3.5.2-foo.gz', 'python-3.5.3-foo.gz', 'python-3.5.4-foo.gz', 'python-3.5.5-foo.gz', 'python-3.5.6-foo.gz', 'python-3.5.7-foo.gz'] pprint(sort_by_major_minor(lst))I did it how I would group Major and Minor Versions together.
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
All humans together. We don't need politicians!