Требуется магия словаря Python

#python #dictionary #flask #jinja2

#python #словарь #flask #jinja2

Вопрос:

У меня есть эти два словаря Python с указанием местоположения и количества.

 A: {'Pompano Beach': ['13'], ' Miami': ['18'], ' W. Palm Beach': ['18']}
B:  {'Atlanta': ['25'], 'Las Vegas': ['50 ']}
  

Мне нужно распечатать их в HTML-таблице. В настоящее время я использую flask с шаблонами jinja2.

Я хотел бы иметь свои результаты в виде:

 C: {'Pompano Beach': ['13', '0'], ' Miami': ['18', '0'], ' W. Palm Beach': ['18', '0'], 'Atlanta': ['0','25'], 'Las Vegas': ['0', '50 ']}
  

Где индекс 0 в каждом значении списка соответствует количеству A, а индекс 1 соответствует количеству B.
Кроме того, если город не существует в B, добавьте 0. То же самое, если он не существует в A, тогда добавьте 0 в соответствующий индекс.

Я не уверен, есть ли более простое решение, но я пришел к тому, что считаю, что это то, что мне нужно, чтобы сохранить мой стиль с помощью шаблонов jinja2.

Ответ №1:

Вы можете использовать понимание dict при использовании .get со значением по умолчанию ['0'] :

 C = {k: A.get(k, ['0'])   B.get(k, ['0']) for k in list(A)   list(B)}
print(C)
  

выходные данные

 {'Pompano Beach': ['13', '0'], ' Miami': ['18', '0'], ' W. Palm Beach': ['18', '0'], 
 'Atlanta': ['0', '25'], 'Las Vegas': ['0', '50 ']}
  

Вы можете получить тот же результат, избегая создания 2 дополнительных списков с

 C = {k: A.get(k, ['0'])   B.get(k, ['0']) for k in A.keys() | B.keys()}