как заполнить значения словаря количеством одинаковых ключей в другом словаре - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть словарь (studentPerf), в котором есть все учащиеся школы с кортежами в качестве ключей.Я хочу посчитать количество учеников мужского пола и число учениц в школе и использовать это для обновления значений во втором словаре.Второй словарь (dictDemGender) имеет 2 ключа, мужской и женский, и 0 в качестве значений.Как я могу изменить 0 в dictDemGender, чтобы отразить число мальчиков и девочек в школе?

Могу ли я сделать это с помощью словаря?

Я дал первые несколько записей для studentPerf:

studentPerf = {('Jeffery','male','junior'):[0.81,0.75,0.74,0.8],
('Able','male','senior'):[0.87,0.79,0.81,0.81],
('Don','male','junior'):[0.82,0.77,0.8,0.8],
('Will','male','senior'):[0.86,0.78,0.77,0.78],
('John','male','junior'):[0.74,0.81,0.87,0.73]}

#Creates a dictionary with genders as keys and 0s as the values to fill later
dictDemGender = {k:0 for k in genders}

dictDemGender = ?

Я задавал похожий вопрос, но неправильно диагностировал проблему.Ранее я обращался за помощью в поиске среднего балла.Что мне действительно нужно, так это количество различных ключевых возможностей.Мне нужно быть в состоянии сделать это без каких-либо внешних пакетов, к сожалению.

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Предполагая, что ожидаемый результат равен {'male':5, 'female':0}, рассмотрите возможность использования Counter.

>>> from collections import Counter
>>> c = Counter(male=0, female=0)
>>> c.update(gen for _, gen, _ in studentPerf)
>>> c
Counter({'female': 0, 'male': 5})

Инициализация двух ключей нулями на самом деле не нужна, вы также можете написать

>>> c = Counter(gen for _, gen, _ in studentPerf)
>>> c
Counter({'male': 5})

потому что Counter поиск по умолчанию равен нулю для отсутствующих ключей:

>>> c['female']
0
0 голосов
/ 19 ноября 2018

Как я уже сказал, я искал решение, которое не требовало бы внешних пакетов.Я знаю, что путь, по которому я пошел, довольно громоздок, но это было для класса, и упражнение имело эти требования.Я нашел способ подсчитать всех мужчин и женщин и ввести эти значения в словарь dictDemGender.

genCounts = ([x[1] for x in list(studentPerf.keys())].count('female'), [x[1] for x in list(studentPerf.keys())].count('male'))
dictDemGender = dict(zip(dictDemGender.keys(), genCounts))
0 голосов
/ 19 ноября 2018

Использование collections.Counter:

from collections import Counter

studentPerf = {('Jeffery','male','junior'):[0.81,0.75,0.74,0.8],
('Able','male','senior'):[0.87,0.79,0.81,0.81],
('Don','male','junior'):[0.82,0.77,0.8,0.8],
('Will','male','senior'):[0.86,0.78,0.77,0.78],
('John','male','junior'):[0.74,0.81,0.87,0.73]}

print(Counter(x[1] for x in studentPerf))
# Counter({'male': 5})

Или, если вам нужны также пустые значения:

gender = {'male': 0, 'female': 0}
gender.update(Counter(x[1] for x in studentPerf))
# {'male': 5, 'female': 0}

Или, используя dict.fromkeys() с Counter:

d = {'male', 'female'}
gender = dict.fromkeys(d, 0)
gender.update(Counter(x[1] for x in studentPerf))
# {'female': 0, 'male': 5}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...