带循环的Python词典

2024-05-19 17:38:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图输出一个以部门标题为键的字典,以及一个仅以该部门中的员工作为其对应值的字典列表。我很接近,但是当我运行这个函数时,dep\u dict会将所有部门员工附加到每个键上。它就是这样做的:

{
department1: [{employee A info}, {employee B info}],
department2: [{employee A info}, {employee B info}]
}

#Function for adding employees to dictionary by department
def dep_emp():
    for x in dep_tup:
        for names in employees:
            if x == employees[names]["em_department"]:
                dep_list.append(employees[names])
                dep_dict[x] = dep_list
                continue

但是它应该是这样的(如果有两个部门),假设雇员A为部门1工作,雇员B为部门2工作:

{
department1: [{employee A info}],
department2: [{employee B info}]
}

注:dep\u tup是用户输入的所有部门名称的元组,employees是由所有员工及其信息组成的字典(key=employeename)


Tags: ininfofor字典names员工employeedict
2条回答

您可以为每个name in employees避免dep_dict[x] = dep_list。你知道吗

您必须为每个部门重置/重新定义dep_list

def dep_emp():
    for x in dep_tup:
        dep_list = []  # define list here
        for names in employees:
            if x == employees[names]["em_department"]:
                dep_list.append(employees[names])

        if dep_list:
            dep_dict[x] = dep_list

您的数据结构dep\u list只需获取员工列表中的所有员工。写下这句话:

dep_dict[x] = dep_list

实际上,您将每个“x”映射到一个对dep\u list的引用,不管发生什么,这个引用都是相同的。相反,您要做的是将员工[姓名]添加到存储在每个部门目录[x]中的独立列表中。如果密钥尚未存储在dep\u dict中,则可以初始化一个列表,如果该密钥已经存在,则可以将其连接到employees[names]中。你知道吗

def dep_emp():
    for x in dep_tup:
        for names in employees:
            if x == employees[names]["em_department"]:
                dep_dict[x] = dep_dict.get(x, []) + employees[names]
                continue

相关问题 更多 >