Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 17, 2019 16:01:56

vmprog
От:
Зарегистрирован: 2011-09-22
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Подсчет вхождений элементов в список, который состоит из словарей.

Здравствуйте.

Есть список, каждый элемент которого это словарь:
ml =
[
{'volue': ‘google’, ‘parametr’: 2},
{'volue': ‘yandex’, ‘parametr’: 7},
{'volue': ‘google’, ‘parametr’: 10}
]

Есть ли способы посчитать число вхождений параметра ‘volume’?
В идеале получить такой результат:
google - 2
yandex -1

Способ с обходом в цикле мне понятен. Хочется найти правильный метод.



Офлайн

#2 Ноя. 18, 2019 00:12:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Подсчет вхождений элементов в список, который состоит из словарей.

  
>>> import itertools
>>> 
>>> lst = [
...     {'a': 1},
...     {'b': 1},
...     {'a': 1},
...     {'b': 1},
...     {'a': 1},
...     {'c': 1},
... ]
>>> 
>>> out = {a:len(tuple(b)) for a, b in
...        itertools.groupby(sorted(next(iter(i)) for i in lst))}
>>> 
>>> out
{'a': 3, 'b': 2, 'c': 1}
>>>



Отредактировано py.user.next (Ноя. 18, 2019 00:14:20)

Офлайн

#3 Ноя. 18, 2019 06:16:12

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Подсчет вхождений элементов в список, который состоит из словарей.

vmprog
Способ с обходом в цикле мне понятен. Хочется найти правильный метод.
Правильный метод тот который дает верный результат. Если у вас получается с циклом то так и делайте это основная конструкция языка. Почему вы ее боитесь?

Формально приведенный код не содержит циклов,но реально они есть. И я бы не рекомендовал так делать, из соображений хотя-бы понятности кода.
 from collections import Counter
ml = [
{'volue': "google", "parametr": 2},
{'volue': "yandex", "parametr": 7},
{'volue': "google", "parametr": 10}
]
print(Counter(map(lambda d:d["volue"],ml)))
ps
volume В вашем примере отсутствует. Поэтому мой код не будет работать. Его надо чуток модернизировать :)



Отредактировано doza_and (Ноя. 18, 2019 06:24:25)

Офлайн

#4 Ноя. 18, 2019 09:03:57

vmprog
От:
Зарегистрирован: 2011-09-22
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Подсчет вхождений элементов в список, который состоит из словарей.

doza_and
Правильный метод тот который дает верный результат. Если у вас получается с циклом то так и делайте это основная конструкция языка. Почему вы ее боитесь?

Это стереотипы из головы:
1) Всегда есть мысль, что обход в цикле не сильно оптимальный по производительности способ.
2) Всегда есть страх быть подвергнутым анафеме если окажется, что есть встроенный метод, который делает в одну строку то, что ты написал в несколько.

В целом, спасибо вам большое за ответы:)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version