Как посчитать вхождения ключа в список словарей - PullRequest
0 голосов
/ 22 мая 2018

Я знаю, что это часто задаваемый вопрос, однако у меня нет доступа к модулю Counter, так как я использую v2.6 из Python.Я хочу посчитать, сколько раз конкретный ключ появляется в списке словарей.

Если мой словарь выглядит так:

data = [{'a':1, 'b':1}, {'a':1, 'c':1}, {'b':1, 'c':1}, {'a':1, 'c':1}, {'a':1, 'd':1}]

Как бы я узнал, сколько раз "a"появляется?Я пытался использовать len, но он возвращает только количество значений для одного ключа.

len(data['a'])

Ответы [ 5 ]

0 голосов
/ 22 мая 2018

Для этого вы можете написать следующую функцию, которая будет работать для данных в предоставленной вами структуре (список диктов):

def count_key(key,dict_list):
    keys_list = []
    for item in dict_list:
        keys_list += item.keys()
    return keys_list.count(key)

Затем вы можете вызвать функцию следующим образом:

data = [{'a':1, 'b':1}, {'a':1, 'c':1}, {'b':1, 'c':1}, {'a':1, 'c':1}, {'a':1, 'd':1}]
count_a = count_key('a',data)

В этом случае count_a будет 4.

0 голосов
/ 22 мая 2018

Однострочное решение может быть:

len([k for d in data for k in d.keys() if k == 'a'])

0 голосов
/ 22 мая 2018

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

n=0
for d in data:
   if 'a' in d:
       n+=1
print(n) 

Здесь n - счетчик, цикл for перебирает список словарей.Выражение 'a' in d вернет true, если ключ 'a' находится в словаре d, и в этом случае счетчик n будет увеличиваться.В конце результат печатается.Я считаю, что в Python 2.6 скобки будут необязательными (я использую 3.6).

0 голосов
/ 22 мая 2018

Вы можете использовать понимание списка.

data = [{'a':1, 'b':1}, {'a':1, 'c':1}, {'b':1, 'c':1}, {'a':1, 'c':1}, {'a':1, 'd':1}]
sum([1 for d in data if 'a' in d])

Объяснение: Сначала возьмите объект словаря из данных списка, проверьте, присутствует ли ключ 'a' в словаре или нет, если присутствует, добавьте 1 в список.Затем суммируйте новый список.

0 голосов
/ 22 мая 2018

У вас не будет доступа к collections.Counter, но collections.defaultdict было добавлено в Python 2.5

keysи выровнять список

data = [j for i in data for j in i.keys()]

# ['a', 'b', 'a', 'c', 'c', 'b', 'a', 'c', 'a', 'd']

collections.defaultdict

from collections import defaultdict
dct = defaultdict(int)

for key in data:
  dct[key] += 1

# defaultdict(<type 'int'>, {'a': 4, 'c': 3, 'b': 2, 'd': 1})

Если вам нужен только счет для a, есть более простые способы сделать это, ноэто даст вам количество ключей в вашем списке словарей.

...