Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

Python. Сортировка по алфавиту списка словарей

#python #json


Имеется список словарей следующего содержания.    

guys_json = [
       {
         "id": 3, 
         "full_name": "Ффффф", 
         "post": "Водитель", 
         "image": "xxx.jpg"},     
       {
         "id": 20, 
         "full_name": "Рррр", 
         "post": "Повар", 
         "image": "yyy.jpg"}, 
       {
         "id": 11, 
         "full_name": "Аааа", 
         "post": "Директор", 
         "image": "tre.jpg"},
       ....]


Необходимо отсортировать его  в алфавитном порядке средствами python по полю 'full
name' и раскидать объекты в категории по буквам кириллического алфавита ("А", "Б"...
"Я"). Подскажите, пожалуйста, с какой стороны подойти к решению
    


Ответы

Ответ 1



Данные в вопросе не являются JSON объектом, например, json.loads() выкинет ошибку. Если интерпертировать данные как исходный код Питона, тогда guys_json (вводящее в заблуждение имя) является обычным списком словарей (никакого отношения к JSON-формату, кроме того что синтаксис похож (как и задумано)). Легко отсортировать список словарей по значению заданного поля: list_of_dicts.sort(key=lambda d: d['full_name']) Уже есть готовая функция, которую можно вместо lambda использовать: from operator import itemgetter list_of_dicts.sort(key=itemgetter('full_name')) Обе вызова сортируют, используя лексикографический порядок, что для не-ASCII символов может быть не то что нужно. См. Поиск упорядоченной подстроки в строке Python.

Ответ 2



Решение следующее Создаем пустой словарь отсортированных элементов leadership_list_json_sorted = {} Идем по первым буквам полей 'full_name'и пользуемся методом словаря setdefault, если такого ключа (буквы алфавита) нет, делаем ее ключом и добавляем объект в качестве значения, если ключ присутствует, просто добавляем объект for item in json.loads(guys_json): guys_json_sorted.setdefault(item['full_name'][0].lower(), []).append(item) Для каждой буквы делаем свою сортировку for char in guys_json_sorted: guys_json_sorted[char].sort(key=lambda x: x['full_name'], reverse=False) guys_json_sorted = json.dumps(leadership_list_json_sorted, ensure_ascii=False)

Комментариев нет:

Отправить комментарий