@undeadter

Как удалить из словаря повторения?

Помогите, пожалуйста, решить пару задач

Вопрос 1:
Как лучше переписать данный участок кода, чтобы было красивее и производительней
Задача: Нужно удалить из массива словари у которых 'time_end' меньше time.time()
for i in range(len(self.array)):
            x = self.array.pop(0)
            if time.time() < x['time_end']:
                self.array.append(x)


Вопрос 2: Как проще перемножить ['data'] у одинаковых ['freq'], оставив при этом только один ['freq']
Есть массив со словарями(длинна массива может быть любая), например такими:
[{
      'freq': 200,
      'data': 20,
},
{
      'freq': 300,
      'data': 10,
},
{
      'freq': 200,
      'data': 99,
}]


Т.е. на выходе получить:
[{
      'freq': 200,
      'data': 1980,
},
{
      'freq': 300,
      'data': 10,
}]
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
@YuriM1983
Фрилансер - веб-программист на питоне
1)
cur_time = time.time()
self.array = [x for x in self.array if x['time_end'] >= cur_time]

2)
from functools import reduce
from operator import mul
input_list = [{ ... }]
temp_dict = dict()
for d in input_list:
  temp_dict.setdefault(d['freq'], []).append(d['data'])
output_list = [{'freq': k, 'data': reduce(mul, v)} for k, v in temp_dict.items()]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы