Python 如何将多个值传递到字典中
因此,我有以下代码:Python 如何将多个值传递到字典中,python,Python,因此,我有以下代码: {'stu_name': 'Abel', 'sex': 'male', 'score': 90, 'cls_id': 1}, {'stu_name': 'Carl', 'sex': 'male', 'score': 80, 'cls_id': 2}, {'stu_name': 'Cecil', 'sex': 'female', 'score': 60, 'cls_id': 1}, {'stu_name': 'Elijah', 'sex': '
{'stu_name': 'Abel', 'sex': 'male', 'score': 90, 'cls_id': 1},
{'stu_name': 'Carl', 'sex': 'male', 'score': 80, 'cls_id': 2},
{'stu_name': 'Cecil', 'sex': 'female', 'score': 60, 'cls_id': 1},
{'stu_name': 'Elijah', 'sex': 'female', 'score': 70, 'cls_id': 2},
{'stu_name': 'Dick', 'sex': 'male', 'score': 90, 'cls_id': 3},
{'stu_name': 'Donald', 'sex': 'male', 'score': 80, 'cls_id': 3},
{'stu_name': 'Jack', 'sex': 'male', 'score': 80, 'cls_id': 2},
{'stu_name': 'Laurent', 'sex': 'female', 'score': 90, 'cls_id': 1},
{'stu_name': 'Rex', 'sex': 'female', 'score': 90, 'cls_id': 1},
{'stu_name': 'Tom', 'sex': 'male', 'score': 70, 'cls_id': 2},
{'stu_name': 'Roy', 'sex': 'female', 'score': 90, 'cls_id': 3},
{'stu_name': 'Steve', 'sex': 'male', 'score': 70, 'cls_id': 1}
]
cls_list = [
{'id': 1, 'cls_name': 'Class One'},
{'id': 2, 'cls_name': 'Class Two'},
{'id': 3, 'cls_name': 'Class Three'},
{'id': 4, 'cls_name': 'Class Four'}
]
我想要的是,让程序输出类名,后面是人数,后面是男性人数,最后是女性人数。到目前为止,我得到的是:
lst_empty = {}
for cls in cls_list:
lst_empty.setdefault(cls['cls_name'], 0)
for stu in stu_list:
if stu['cls_id'] == cls['id']:
lst_empty[cls['cls_name']] +=1
if stu['sex'] == 'male':
由于setdefault只能给我2个项目,所以我有点纠结于如果sex=male位怎么办。
我想我的主要问题是如何将男性的数量输入到空字典中。
我不想彻底改变我的代码,我只想知道我可以用现在的代码做什么。
谢谢 我已将
lst_清空
作为一个目录列表。代码如下:
stu_list = [{'stu_name': 'Abel', 'sex': 'male', 'score': 90, 'cls_id': 1},
{'stu_name': 'Carl', 'sex': 'male', 'score': 80, 'cls_id': 2},
{'stu_name': 'Cecil', 'sex': 'female', 'score': 60, 'cls_id': 1},
{'stu_name': 'Elijah', 'sex': 'female', 'score': 70, 'cls_id': 2},
{'stu_name': 'Dick', 'sex': 'male', 'score': 90, 'cls_id': 3},
{'stu_name': 'Donald', 'sex': 'male', 'score': 80, 'cls_id': 3},
{'stu_name': 'Jack', 'sex': 'male', 'score': 80, 'cls_id': 2},
{'stu_name': 'Laurent', 'sex': 'female', 'score': 90, 'cls_id': 1},
{'stu_name': 'Rex', 'sex': 'female', 'score': 90, 'cls_id': 1},
{'stu_name': 'Tom', 'sex': 'male', 'score': 70, 'cls_id': 2},
{'stu_name': 'Roy', 'sex': 'female', 'score': 90, 'cls_id': 3},
{'stu_name': 'Steve', 'sex': 'male', 'score': 70, 'cls_id': 1}]
cls_list = [{'id': 1, 'cls_name': 'Class One'},
{'id': 2, 'cls_name': 'Class Two'},
{'id': 3, 'cls_name': 'Class Three'},
{'id': 4, 'cls_name': 'Class Four'}]
lst_empty = []
for cls in cls_list:
dct = {}
dct.setdefault(cls['cls_name'], 0)
dct.setdefault('male', 0)
for stu in stu_list:
if stu['cls_id'] == cls['id']:
dct[cls['cls_name']] +=1
if stu['sex'] == 'male':
dct["male"] += 1
dct["female"] = dct[cls["cls_name"]] - dct["male"]
lst_empty.append(dct)
for i in lst_empty:
print(i)
输出为:
{'Class One': 5, 'male': 2, 'female': 3}
{'Class Two': 4, 'male': 3, 'female': 1}
{'Class Three': 3, 'male': 2, 'female': 1}
{'Class Four': 0, 'male': 0, 'female': 0}
最简单但并不理想的解决方案是:
for cls in cls_list:
cls_students = list(filter(lambda s: s['cls_id'] == cls['id'], stu_list))
cls_males = list(filter(lambda s: s['sex'] == 'male' , cls_students))
cls_females = list(filter(lambda s: s['sex'] == 'female' , cls_students))
print(cls['cls_name'])
print(f"Total students: {len(cls_students)}")
print(f"Num of males: {len(cls_males) }")
print(f"Num of females: {len(cls_females) }")
<>但是最好考虑<代码>熊猫>代码>库,其方便的<代码>数据文件< /C> > < p>只使用<代码> DITC.GET:
dct = {}
for stu in stu_list:
if stu['cls_id'] == cls['id']:
dct[cls['cls_name']] = dct.get(cls['cls_name'], 0) + 1
# will handle both 'male' and 'female' cases
dct[stu['sex']] = dct.get(stu['sex'], 0) + 1
lst_empty.append(dct)
您可以将默认设置为空列表或其他词汇表
lst_empty.setdefault(cls['cls_name'], [0, 0, 0])
或
如果要将结果存储在dict中,可以这样做:
cls_dict = {}
for cls in cls_list:
cls_dict[cls['id']]={}
cls_dict[cls['id']]['id']=cls['id']
cls_dict[cls['id']]['cls_name']=cls['cls_name']
cls_dict[cls['id']]['population']=0
cls_dict[cls['id']]['males']=0
cls_dict[cls['id']]['females']=0
for stu in stu_list:
if stu['cls_id'] in cls_dict:
id = stu['cls_id']
if stu['sex']=='female':
cls_dict[id]['females']+=1
cls_dict[id]['population']+=1
elif stu['sex']=='male':
cls_dict[id]['males']+=1
cls_dict[id]['population']+=1
print(cls_dict)
输出将是:
{1: {'id': 1, 'cls_name': 'Class One', 'population': 5, 'males': 2, 'females': 3},
2: {'id': 2, 'cls_name': 'Class Two', 'population': 4, 'males': 3, 'females': 1},
3: {'id': 3, 'cls_name': 'Class Three', 'population': 3, 'males': 2, 'females': 1},
4: {'id': 4, 'cls_name': 'Class Four', 'population': 0, 'males': 0, 'females': 0}}
您必须使用字典,还是可以将其转换为数据帧?因为有了数据帧,你就可以很容易地排序了。你想把
lst_empty
作为一个目录列表吗?@IgnacioAlorre好吧,现在如果不是字典,我只能用一个列表……对不起,关于你的第二个问题,最好不是,但如果是这样的话,我只想补充一下,它还应该包含,最后是女性的数量。如果前面没有提到第一行代码,我怎么加上第二行0?
{1: {'id': 1, 'cls_name': 'Class One', 'population': 5, 'males': 2, 'females': 3},
2: {'id': 2, 'cls_name': 'Class Two', 'population': 4, 'males': 3, 'females': 1},
3: {'id': 3, 'cls_name': 'Class Three', 'population': 3, 'males': 2, 'females': 1},
4: {'id': 4, 'cls_name': 'Class Four', 'population': 0, 'males': 0, 'females': 0}}