Я пытаюсь создать словарь словарей, который создается путем фильтрации известного словаря, а условное выражение исходит из списка. Это было бы динамическим, поэтому данные в списке и известном словаре будут постоянно меняться.
list = {5: ('t', 'a'), 7: ('s', 'o')}
known_dict = {('s', 'a'): 105, ('s', 'e'): 2, ('s', 'h'): 5, ('t', 'a'): 21,
('t', 'e'): 8, ('t', 'h'): 21}
Учитывая вышеизложенное, я пытаюсь создать словарь, в котором ключи являются первыми символами кортежей в списке, а значения — соответствующими кортежами первых символов из известного словаря.
desired_output = {s: {('s', 'a'): 105, ('s', 'e'): 2, ('s', 'h'): 5},
t: {('t', 'a'): 21, ('t', 'e'): 8, ('t', 'h')}}
Код, который я должен попытаться достичь, следующий:
desired_output = {
key[0]: {
key: value for key, value in known_dict.items()
if key[0] == [a for a,b in list.values()]
}
for key in known_dict
}
Проблема в том, что когда происходит понимание списка, результатом является список, а не отдельные символы, поэтому мой результат - пустой словарь, потому что условие не выполняется.
Если есть что-то, что мне не хватает, или если есть другой подход, который я должен рассмотреть, пожалуйста, дайте мне знать.
Следующее должно работать. Перебирайте значения в "list"
(которые вы должны переименовать) и собирайте элементы из "known_dict"
по пути, а не наоборот:
desired_output = {
v[0]: {k_: v_ for k_, v_ in known_dict.items() if k_[0]==v[0]}
for v in list.values()
}
# {'t': {('t', 'a'): 21, ('t', 'e'): 8, ('t', 'h'): 21},
# 's': {('s', 'a'): 105, ('s', 'e'): 2, ('s', 'h'): 5}}
Примечание: "list"
— ужасное имя переменной. Во-первых, он затеняет встроенный шрифт list
. Во-вторых, вы используете его для dict
.
Это работает отлично. Спасибо! Я знаю о проблемах с именами «списков», я изменил имя, чтобы обобщить мое фактическое имя списка. Я полагаю, в данном случае не было реальной причины для этого.