如何用另一个字典中相似键的计数填充字典值

时间:2018-11-19 17:34:04

标签: python dictionary

我有一本字典(studentPerf),其中有一所学校的所有学生,以元组为键。我想计算学校中的男生人数和女生人数,并以此来更新第二本词典中的值。第二个字典(dictDemGender)具有2个键,即公和母,值分别为0。如何更改dictDemGender中的0以反映学校中的男性和女性人数?

我可以用字典理解吗?

我已经将头几项提供给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 :(得分:1)

使用collections.Counter

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

或者,如果您还需要空计数:

dict.fromkeys()

或者将Counterd = {'male', 'female'} gender = dict.fromkeys(d, 0) gender.update(Counter(x[1] for x in studentPerf)) # {'female': 0, 'male': 5} 结合使用:

root.mainloop()

答案 1 :(得分:0)

假设预期输出为{'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

答案 2 :(得分:0)

正如我所说,我正在寻找不需要外部包装的解决方案。我知道我解决这个问题的方法相当繁琐,但这是针对一堂课,而且练习有这些要求。我找到了一种计算所有男性和女性人数并将这些值输入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))