Получить наибольшее число для уникального объекта в словаре? - PullRequest
1 голос
/ 21 апреля 2020

Я пытаюсь выяснить, как найти наибольшее число tv для каждого уникального version_title. Я сохранил все необходимые значения в диктовке и хочу сделать его максимально быстрым и эффективным.

# Store all timelines existing with it's information in a dict
for tl_index in range(1, timelines_total+1):
    timeline_data[project.GetTlbyI(tl_index).GetDependingName()] = {
        "name": project.GetTlbyI(tl_index).GetDependingName(),
        "version_title": project.GetTlbyI(tl_index).GetDependingName().split('_')[3],
        "stage": project.GetTlbyI(tl_index).GetDependingName().split('_')[4] + "_" + project.GetTlbyI(tl_index).GetDependingName().split('_')[5],
        "tv": int(project.GetTlbyI(tl_index).GetDependingName().split('_')[6][2:4])
        }

pprint(timeline_data)


# Find all existing Version-Titles
version_titles = []
for name, timeline_info in timeline_data.items():
    version_titles.append(timeline_info['version_title'])
    # print(timeline_info['version_title'], timeline_info['tv'])  # Print Edit-Version-Title and Version Number


# Generate list of unique Version-Titles
unique_version_titles = (list(set(version_titles)))
print(unique_version_titles)


for name, timeline_info in timeline_data.items():
    print(timeline_info['version_title'], timeline_info['tv'])

pprint(timeline_data) результат:

{'1912_Sample_File_ALLin_03_Anim_Tv02_PV01_200421': {'stage': '03_Anim',
                                                                    'version_title': 'ALLin',
                                                                    'name': '1912_Sample_File_ALLin_03_Anim_Tv02_PV01_200421',
                                                                    'tv': 2},
 '1912_Sample_File_ALLin_05_Load_Tv01_PV01_200421': {'stage': '05_Load',
                                                                    'version_title': 'ALLin',
                                                                    'name': '1912_Sample_File_ALLin_05_Load_Tv01_PV01_200421',
                                                                    'tv': 1},
 '1912_Sample_File_TVC60sec_07_Rough_Tv03_PV01_200421': {'stage': '07_Rough',
                                                                       'version_title': 'TVC60sec',
                                                                       'name': '1912_Sample_File_TVC60sec_07_Rough_Tv03_PV01_200421',
                                                                       'tv': 3}}

unique_version_titles содержание :

['TVC60sec', 'ALLin']

Результат, который я ищу:

# A dict with the highest value for each unique `version_title`.

{highest_value: {'ALL_in': 2, "TVC60sec": 3}

1 Ответ

1 голос
/ 21 апреля 2020

defaultdict может быть очень полезным в этом случае. Попробуйте:

from collections import defaultdict
highest = defaultdict(int)
for t in timeline_data.values():
    title, tv = t["version_title"], t["tv"]
    if highest[title] < tv:
        highest[title] = tv
output = {"highest_value": dict(highest)}
print(output) # output: {'highest_value': {'ALLin': 2, 'TVC60sec': 3}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...