Как можно вычислить общее количество одинаковых элементов в словаре?

Как можно посчитать сумму поля amount у словарей с одинаковыми uid и оставить только один словарь с обновленным значением amount?
  • 24 мая 2024 г. 10:40
Ответы на вопрос 3
1. Для вычисления общего количества одинаковых элементов в словаре можно использовать следующий код на Python:

```python
my_dict = {'a': 1, 'b': 2, 'c': 1, 'd': 3, 'e': 1}

counter = {}
for value in my_dict.values():
    counter[value] = counter.get(value, 0) + 1

for key, value in counter.items():
    print(f'Элемент {key} встречается {value} раз(а) в словаре.')
```

2. Для подсчета суммы поля amount у словарей с одинаковыми uid и обновления значения amount можно использовать следующий код на Python:

```python
data = [
    {'uid': 1, 'amount': 100},
    {'uid': 2, 'amount': 200},
    {'uid': 1, 'amount': 150},
    {'uid': 3, 'amount': 50}
]

uid_amount = {}
for item in data:
    uid = item['uid']
    amount = item['amount']
    uid_amount[uid] = uid_amount.get(uid, 0) + amount

result = []
for uid, amount in uid_amount.items():
    result.append({'uid': uid, 'amount': amount})

print(result)
```

В данном случае будет обновлен список `data`, где для каждого уникального uid будет просуммировано значение amount.
import json


json_string = """[
            {
                "uid_1c": "c1f5e839-0c1d-11ed-aa44-ac1f6bd30991",
                "number": "1",
                "amount": 19
            },
            {
                "uid_1c": "c1f5e839-0c1d-11ed-aa44-ac1f6bd30991",
                "number": "2",
                "amount": 10
            },
            {
                "uid_1c": "7421a94a-4327-11ed-aa45-ac1f6bd30990",
                "number": "3",
                "amount": 200
            }
]"""


json_object = json.loads(json_string)

# делаем базовый словарь на каждый уникальный uid
base_dict_elem = {el.get('uid_1c'): {'uid_1c': el.get('uid_1c'), 'number': 0, 'amount': 0} for el in json_object}

# итерируемся по списку словарей(json) для заполнения основного словаря
for el in json_object:
    uid = el.get('uid_1c')
    amount = el.get('amount')
    base_dict_elem[uid]['amount'] += amount

# формируем список словарей с уникальными uid и статистикой
result = []
counter = 1
for k, v in base_dict_elem.items():
    v['number'] = counter
    result.append(v)
    counter += 1

print(result)
def unique_with_sum(arr, id_key, sum_key):
  unique = {}

  for n in arr:
    unique.setdefault(n[id_key], { **n, sum_key: 0 })[sum_key] += n[sum_key]

  return [*unique.values()]


result = unique_with_sum(arr, 'uid_1c', 'amount')
Похожие вопросы