Учитывая диктовку, подобную приведенной ниже, как мне «взорвать» ключи, чтобы создать новую диктовку с разделенными ключами? Каждый ключ должен быть разделен на «n».
original_dict = {"AB n DC": [12, 13], "JH n UY": [22, 1]}
new_dict = {"AB": [12, 13], "DC": [12, 13], "JH": [22, 1], "UY":[22,1]}






new_dict = {k: v for orig_k, v in original_dict.items() for k in orig_k.split(' n ')}
@tobias_k Да, зависит от последующих операций со значениями.
Чувак, тег Python не теряет своей скорости. Опереди меня на несколько минут.
@ipodtouch0218 мне впервые повезло ответить на такой вопрос с такой скоростью :)
{kk: original_dict[k] for k in original_dict for kk in k.split(' n ')}
следует сделать
Но следует отметить, что при этом не учитывается тот факт, что если «AB ∩ DC» равно [12,13], то AB может быть [12, 17, 42, 69, 13] и DC [12, 37, 13]. 99, 13]
Не говоря уже о случаях, когда ваш исходный текст выглядит примерно так:
original_dict = {"AB n JH": [12, 13], "JH n UY": [22, 1]}
Итак, мой ответ (и другой ответ, который пришел, пока я печатал) просто игнорирует то, что означает n, и просто взрывается.
Если вы хотите понять логику и не чувствуете себя комфортно, используя более сложную логику понимания Python, следующий код даст вам то, что вам нужно.
Начните с инициализации new_dict как пустого словаря, затем пройдите через original_dict и разделите его на " n ", чтобы создать список новых ключей.
Переберите эти new_keys и присвойте каждому исходное значение из original_dict.
new_dict = {}
for key, value in original_dict.items():
# Split keys on " n " or any value here
new_keys = key.split(" n ")
for each_new_key in new_keys:
new_dict[each_new_key] = value
print(new_dict)
Приложение: Обратите внимание, что все
vдля разделенных клавиш являются ссылками на один и тот же список; возможно, используйтеk: list(v)для создания копий (зависит от того, чего именно хочет ОП, но, вероятно, стоит отметить).