Найти - Пользователи
Полная версия: Подсчет вхождений элементов в список, который состоит из словарей.
Начало » Python для новичков » Подсчет вхождений элементов в список, который состоит из словарей.
1
vmprog
Здравствуйте.

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

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

Способ с обходом в цикле мне понятен. Хочется найти правильный метод.
py.user.next
  
>>> 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}
>>>
doza_and
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 В вашем примере отсутствует. Поэтому мой код не будет работать. Его надо чуток модернизировать :)
vmprog
doza_and
Правильный метод тот который дает верный результат. Если у вас получается с циклом то так и делайте это основная конструкция языка. Почему вы ее боитесь?

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

В целом, спасибо вам большое за ответы:)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB