#!/usr/local/cpython-3.4/bin/python3 import dbm import copy import collections def get_max_size(results_db): max_size = -1 for key in results_db.keys(): fields = key.split(b'/') size = int(fields[4]) max_size = max(max_size, size) assert max_size != -1 return max_size def get_by_kind(results_db, max_size): result_dict = collections.defaultdict(list) for db_key in results_db.keys(): fields = db_key.split(b'/') size = int(fields[4]) value = results_db[db_key] if size == max_size and value != b'too_long': result_key = tuple(fields[:3]) tuple_ = (float(results_db[db_key]), fields[3]) result_dict[result_key].append(tuple_) return result_dict def get_best_4s(by_kind): my_by_kind = copy.deepcopy(by_kind) for value in my_by_kind.values(): value.sort() value[:] = value[:5] return my_by_kind def get_final_set(best_4s): final_set = set() for value in best_4s.values(): for tuple_ in value: final_set.add(tuple_[1]) return final_set def main(): results_db = dbm.open('results', 'r') max_size = get_max_size(results_db) #print('max size is {}'.format(max_size)) by_kind = get_by_kind(results_db, max_size) #pprint.pprint(by_kind) best_4s = get_best_4s(by_kind) final_set = get_final_set(best_4s) for dict_name in sorted(list(final_set)): print(dict_name) main()