Как сделать запрос на группировку по уникальному значению в Django
Я хочу сгруппировать данные по уникальному значению. Например, страна: xyz, город: abc; страна: xyz, город: efg; страна: wxyz, город: abcde. Результат запроса: xyz:[abc, efg], wxyz: [abcde]
Я решил эту проблему с помощью словаря**( query_res[country_val].append(city_val) )**, но я хочу знать, есть ли лучшее решение.
Одним из способов решения этой проблемы является использование класса defaultdict из модуля collections. Этот класс работает как обычный словарь, но позволяет указать значение по умолчанию для ключей, которые не существуют в словаре. В данном случае вы можете использовать его для создания словаря, в котором значением по умолчанию для каждого ключа будет пустой список. Затем, когда вы встретите новую страну, вы можете добавить ее в словарь со значением по умолчанию в виде пустого списка и добавить город в этот список. Вот пример:
from collections import defaultdict
# Initialize an empty dictionary with default values of empty lists
query_res = defaultdict(list)
for country, city in data:
# Add the country to the dictionary if it doesn't already exist,
# with a default value of an empty list
query_res[country]
query_res[country].append(city)
Этот подход имеет то преимущество, что он более лаконичен и читабелен, чем использование обычного словаря и проверка существования ключей вручную. Он также позволяет избежать необходимости использования блока try-except для обработки случая, когда ключ не существует в словаре.