[英]How to pass multiple values into a dictionary
所以我有以下代碼:
{'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'}
]
我想要的是將程序 output 命名為 class 名稱,然后是其中的人數,然后是其中的男性人數,最后是女性人數。 我到目前為止是這樣的:
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 件物品,所以我有點糾結於如何處理 if sex = male 位。 我想我的主要問題是如何將男性數量傳遞到空字典中。 我不想徹底改變我的代碼,我只想知道我現在可以用我的代碼做什么。 謝謝!
我已將lst_empty
作為字典列表。 代碼如下:
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)
output 是:
{'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) }")
但是您最好考慮pandas
庫及其方便的DataFrame
s
只需使用dict.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)
您可以 setdefault 一個空列表或另一個字典。
lst_empty.setdefault(cls['cls_name'], [0, 0, 0])
或者
lst_empty.setdefault(cls['cls_name'], {"nb_people" : 0, "nb_male" : 0, "nb_female" : 0})
如果您希望將結果頂部存儲在字典中,您可以這樣做:
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)
output 將是:
{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}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.