Python разделяет список объектов на подсписки на основе атрибутов объектов - PullRequest
0 голосов
/ 24 мая 2018

У меня есть такой список:

original_list = [
    {
        amenity: "Parking",
        amount: 120,
        version: 1,
        percentage: 4,
        id: 1
    },
    {
        amenity: "Pool",
        amount: 300,
        version: 2,
        percentage: 10,
        id: 5,
    },
    {
        amenity: "Pool",
        amount: 200,
        version: 1,
        percentage: 10,
        id: 2
}]

Итак, как вы можете видеть, в списке есть два объекта, которые имеют удобство «Пул», как я могу разбить этот список на меньшие списки на основедля удобства:

Например:

vlist_a = [{
    amenity: "Parking",
    amount: 120,
    version: 1,
    percentage: 4,
    id: 1
}]

list_b = [{
    amenity: "Pool",
    amount: 300,
    version: 2,
    percentage: 10,
    id: 5,
},
{
    amenity: "Pool",
    amount: 200,
    version: 1,
    percentage: 10,
    id: 2
}]

Я намерен сделать так, чтобы при заказе их таким образом я мог получить объект с наибольшей версией в списке, используя уравнение лямбды.

Заранее спасибо

1 Ответ

0 голосов
/ 24 мая 2018

Используйте словарь для переменного числа переменных

Решение Pythonic заключается в использовании collections.defaultdict:

from collections import defaultdict

d = defaultdict(list)

for item in original_list:
    d[item['amenity']].append(item)

print(d['Pool'])

[{'amenity': 'Pool', 'amount': 300, 'id': 5, 'percentage': 10, 'version': 2},
 {'amenity': 'Pool', 'amount': 200, 'id': 2, 'percentage': 10, 'version': 1}]

print(d['Parking'])

[{'amenity': 'Parking', 'amount': 120, 'version': 1, 'percentage': 4, 'id': 1}]

Мое намерение состоит в том, чтобыкогда я упорядочиваю их таким образом, я могу получить объект с наибольшей версией для каждого списка, используя лямбда-уравнение.

Вы можете использовать словарное понимание с max для этой задачи:

res = {k: max(v, key=lambda x: x['version']) for k, v in d.items()}

{'Parking': {'amenity': 'Parking',
  'amount': 120,
  'id': 1,
  'percentage': 4,
  'version': 1},
 'Pool': {'amenity': 'Pool',
  'amount': 300,
  'id': 5,
  'percentage': 10,
  'version': 2}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...