Нахождение некоторых из двух ключевых элементов dict игнорирование элемента с наименьшим значением - PullRequest
0 голосов
/ 10 января 2020

У меня есть список, содержащий словари, подобные этому

[{u'itemcode': 1, u'cost': 5, u'type': u'train', u'name': u'percy'},
{u'itemcode': 2, u'cost': 10, u'type': u'train', u'name': u'Caron'},
{u'itemcode': 3, u'cost': 12, u'type': u'train', u'name': u'thameslink'},
{u'itemcode': 6, u'cost': 15, u'type': u'car', u'name': u'Ford'},]

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

[{u'itemcode': 4, u'cost': 20.5, u'type': u'car', u'name': u'volvo'},
{u'itemcode': 5, u'cost': 25, u'type': u'car', u'name': u'tesla'},
{u'itemcode': 6, u'cost': 15, u'type': u'car', u'name': u'Ford'}]

для этого набора общая сумма должна составлять 45,5, но получается 40 Я пытаюсь поставить еще одни и те же предметы со стоимостью:

    types = {}
    selected_types = []
    current_item_cost = []
    last_item_type = None
    for item in self._deserialize():
        # if item["type"] not in types:
            current_item_cost.append(item["cost"])
            types[item["type"]] = current_item_cost

    print types

, но это добавляет все затраты в каждом типе

поэтому для 3 поездов я бы предположил, что сумма должна составлять 22, игнорируя элемент с кодом 1!

Ответы [ 2 ]

0 голосов
/ 10 января 2020
d = [{u'itemcode': 1, u'cost': 5, u'type':           u'train', u'name': u'percy'},
{u'itemcode': 2, u'cost': 10, u'type':                 u'train', u'name': u'Caron'},
{u'itemcode': 3, u'cost': 12, u'type':                u'train', u'name': u'thameslink'},
{u'itemcode': 6, u'cost': 15, u'type': u'car',     u'name': u'Ford'},]
li=[]
length= len(d)
for i in range(length-1):
    dic = d[i]
    li.append(dic[u'cost'])
lowest = min(li)
li.remove(lowest)
print(sum(li))
0 голосов
/ 10 января 2020

Ниже собраны затраты для элементов того же типа, а затем распечатывается общая сумма, удаляя самую низкую, если длина составляет 3 или больше.

#!python3
from collections import defaultdict

data = [{'itemcode': 1, 'cost': 5, 'type': 'train', 'name': 'percy'},
        {'itemcode': 2, 'cost': 10, 'type': 'train', 'name': 'Caron'},
        {'itemcode': 3, 'cost': 12, 'type': 'train', 'name': 'thameslink'},
        {'itemcode': 6, 'cost': 15, 'type': 'car', 'name': 'Ford'}]

types = defaultdict(list)
for datum in data:
    types[datum['type']].append(datum['cost'])

for item,costs in types.items():
    print(f'type: {item} total: {sum(sorted(costs)[1:]) if len(costs) >= 3 else sum(costs)}')
#!python2
from collections import defaultdict

data = [{u'itemcode': 1, u'cost': 5, u'type': u'train', u'name': u'percy'},
        {u'itemcode': 2, u'cost': 10, u'type': u'train', u'name': u'Caron'},
        {u'itemcode': 3, u'cost': 12, u'type': u'train', u'name': u'thameslink'},
        {u'itemcode': 6, u'cost': 15, u'type': u'car', u'name': u'Ford'}]

types = defaultdict(list)
for datum in data:
    types[datum[u'type']].append(datum[u'cost'])

for item,costs in types.items():
    total = sum(sorted(costs)[1:]) if len(costs) >= 3 else sum(costs)
    print u'type: {} total: {}'.format(item,total)

Вывод:

type: train total: 22
type: car total: 15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...