Python:在一个字典上循环,并在满足条件的情况下在新字典中创建键/值对

Python:在一个字典上循环,并在满足条件的情况下在新字典中创建键/值对,python,dictionary,conditional,key,iteration,Python,Dictionary,Conditional,Key,Iteration,我想将一个字典的值与第二个字典的值进行比较。如果这些值满足某些条件,我想创建第三个字典,其中包含键和值对,这些键和值对将根据匹配项的不同而变化 这是一个人为的例子,说明了我的问题 编辑:对于所有的返回很抱歉,但是堆栈溢出无法识别单个返回,并且在一行上运行3-4行,使代码难以辨认。而且,它不会使我的代码变灰。不知道为什么 这就是我希望看到的“学校区就业”的价值: {0: {'best_paying_job': 'superintendent'}, 1: {'other_job': 'socia

我想将一个字典的值与第二个字典的值进行比较。如果这些值满足某些条件,我想创建第三个字典,其中包含键和值对,这些键和值对将根据匹配项的不同而变化

这是一个人为的例子,说明了我的问题

编辑:对于所有的返回很抱歉,但是堆栈溢出无法识别单个返回,并且在一行上运行3-4行,使代码难以辨认。而且,它不会使我的代码变灰。不知道为什么

这就是我希望看到的“学校区就业”的价值:

{0: {'best_paying_job': 'superintendent'}, 
 1: {'other_job': 'social_studies_teacher'}}
这就是我得到的:

{1: {'other_job': 'social_studies_teacher'}}
我知道这里出了什么问题。Python在第一个if块(第6-8行)后设置
jobs_in_school_district
等于
{0:{'best_paying_job':'supervision'}
,然后执行第二个if块(第10行)。但随后它会覆盖
{0:{'best_paying_job':'supervision'}
在第11行,并再次创建一个空的dict。然后它将1:{'other_job':'social_studies_teacher'}分配给第12行学校区的
jobs_

但是如果我在每个for块(第7行和第11行)中删除了两个
jobs\u in_school\u district[key]={}
,然后在'for'语句(新的第5行)前面放一个,如下所示:

jobs_in_school_district[key] = {}

for key in school_districts:
    if (employee['skills'] == school_districts[key]['needs']):
        jobs_in_school_district[key]['best_paying_job'] = 'superintendent'

    if (employee['teaches'] == jobs[key]['needs']):
        jobs_in_school_district[key]['other_job'] = 'social_studies_teacher'

print(jobs_in_school_district)
它只会检查“school_districts”(学区)dict中的第一个键,然后停止(我想它会停止循环,我不知道),因此我得到以下结果:

jobs_in_school_district = {0: {'best_paying_job': 'superintendent'}
(我试过几次重写它,有时会出现“键错误”)

第一个问题:为什么第二块代码不起作用? 第二个问题:如何编写代码使其工作

(我真的不明白“下一步”(方法或函数)及其作用,因此如果我必须使用它,请您解释一下好吗?谢谢)。

最简单的修复方法(以及对第一个问题的回答):
键在您最新的代码片段中没有正确定义,分配必须在
for
内,但在
if
外:

for key in school_districts:
    jobs_in_school_district[key] = {}
    if ... etc etc ...

    if ... other etc etc ...
实际上,最简单的可能是使用“默认命令”而不是普通命令:

import collections
jobs_in_school_district = collections.defaultdict(dict)
现在,您可以删除对
[key]
索引的分配,如果第一次需要任何给定的key,您可以自动完成分配。

尝试放置

jobs_in_school_district[key] = {}
在for循环之后但在if语句之前


是的,格式不可读。

如果您将社会研究更改为没有下划线的社会研究,代码将按预期工作。请参阅此行:

school_districts = {0: {'needs':  'superintendent', 'grades': 'K-12'}, 
                    1:{'needs': 'social_studies', 'grades': 'K-12'}}

你应该在这里仔细阅读如何格式化代码示例,这是不可读的。除非有某种方法来强制它,否则它拒绝这样做。
school_districts = {0: {'needs':  'superintendent', 'grades': 'K-12'}, 
                    1:{'needs': 'social_studies', 'grades': 'K-12'}}