Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将多个值传递到字典中_Python - Fatal编程技术网

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}}