Список списка словарей в список списка словарей с одинаковым значением стоимости

У меня есть список словарей, и у каждого словаря есть свойство person_id

[{'person_id': 1, 'something..': 'else'}, {'person_id': 3, 'something..': 'else'}, {'person_id': 1, 'something..': 'else'}] 

Как сгруппировать все словари с одним и тем же «person_id» в список и разбить предыдущий список дирижаблей на список списка словарей (внутренний список содержит только словари с одинаковым «person_id»).

  • Как сделать не равным в фильтрации запросов Django?
  • Как удалить окно прокрутки в python и восстановить фоновое окно?
  • Как я могу заставить код Python оставаться под 80 символами?
  • Разбор значений из файла JSON?
  • Указатель функции Python
  • Почему python использует «магические методы»?
  •  [[{'person_id': 1, 'something..': 'else'}, {'person_id': 1, 'something..': 'else'}], [{'person_id': 3, 'something..': 'else'}]] 

    Я сделал это с простой итерацией, и проверка уже идет с этими словарями, но есть ли эффективный способ в Python?

  • Есть ли функция php, такая как zip python?
  • Только извлечение текста из этого элемента, а не его детей
  • Как написать исходный шестнадцатеричный байт в stdout в Python 3?
  • Растрирование нескольких элементов в matplotlib
  • Полиморфизм в Python
  • Устранение сбоев "ssl certificate verify failed" ошибка
  • One Solution collect form web for “Список списка словарей в список списка словарей с одинаковым значением стоимости”

    Ваш вход не сортируется person_id , поэтому используйте метод collections.defaultdict() с циклом:

     from collections import defaultdict grouped = defaultdict(list) for person in inputlist: grouped[person['person_id']].append(person) grouped = grouped.values() 

    Это сортирует входной список в ведра, а затем помещает все ведра обратно в внешний список. Если вам нужен вывод для сортировки по id, вы можете использовать:

     grouped = [grouped['pid'] for pid in sorted(grouped)] 

    Если вам нужен исходный список в отсортированном порядке или вы можете создать его в отсортированном порядке, вы также можете использовать itertools.groupby() для своей группировки:

     from itertools import groupby from operator import itemgetter grouped = [list(g) for p, g in groupby(inputlist, key=itemgetter('person_id'))] 

    но это требует, чтобы inputlist отсортировался первым.

    Python - лучший язык программирования в мире.