Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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_Dictionary_List Comprehension - Fatal编程技术网

Python 使用字典理解从字典列表中选定的字典创建新的字典

Python 使用字典理解从字典列表中选定的字典创建新的字典,python,dictionary,list-comprehension,Python,Dictionary,List Comprehension,目录的来源列表: employees = [{'id':1, 'name': "Jonathan", 'last_name':"Wilkinson", "email":"jwilki@zbigg.com", 'phone':"98753215646", 'role':"Owner"}, {'id':2, 'name': 'Mary', 'last_name': 'Sue', 'email': 'jjeelasj221@zbigg.net', 'phone': "9323

目录的来源列表:

employees = [{'id':1, 'name': "Jonathan", 'last_name':"Wilkinson", "email":"jwilki@zbigg.com", 'phone':"98753215646", 'role':"Owner"},
            {'id':2, 'name': 'Mary', 'last_name': 'Sue', 'email': 'jjeelasj221@zbigg.net',  'phone': "932342384758", 'role': 'Manager'},
            {'id':3,'name': "Joanna", 'last_name': "Kenderson", 'email':'kjjsdakjae@kkzbigg.com', 'phone': '9876478398478', 'role': 'Employee'}
            ]
我想创建一个理解,选择一个dict并将其添加到包含一个dict的新变量中:

sel_employee = [employee for employee in employees if employee['id'] == 2]

emp_done = {}
for employee in sel_employee:
    emp_done = employee
换句话说,如何将上述理解之后的所有内容添加到上述理解中


正如目前没有的
emp_done
一样,它只是创建了一个单一的理解,但在一个列表中。

这不仅仅是你想要的吗

sel_employee = [employee for employee in employees if employee['id'] == 2][0]

这不正是你想要的吗

sel_employee = [employee for employee in employees if employee['id'] == 2][0]

这是另一种方法。 如果未找到
id==2
True
的词典,它还将
sel\u employee
设置为
None

sel_employee = next((employee for employee in employees if employee['id'] == 2), None)

这是另一种方法。 如果未找到
id==2
True
的词典,它还将
sel\u employee
设置为
None

sel_employee = next((employee for employee in employees if employee['id'] == 2), None)
或:

输出:

{'id': 2, 'name': 'Mary', 'last_name': 'Sue', 'email': 'jjeelasj221@zbigg.net',
'phone': '932342384758', 'role': 'Manager'}
或:

输出:

{'id': 2, 'name': 'Mary', 'last_name': 'Sue', 'email': 'jjeelasj221@zbigg.net',
'phone': '932342384758', 'role': 'Manager'}

您可以使用一个简单的
for
循环,并在满足条件时使用
dict.update
后跟
break

emp_done = {}
for employee in sel_employee:
    if employee['id'] == 2:
        emp_done.update(employee)
        break
如果您的条件从未满足,
emp_done
将仍然是一个空字典。如果满足您的条件,
emp_done
将仅给出第一个实例


同样,您可以使用
next
和生成器表达式,如下所示。但是,生成器表达式有开销,这对于较大的列表来说可能非常昂贵。

您可以使用一个简单的
for
循环,并在满足条件时使用
dict.update
,然后使用
break

emp_done = {}
for employee in sel_employee:
    if employee['id'] == 2:
        emp_done.update(employee)
        break
如果您的条件从未满足,
emp_done
将仍然是一个空字典。如果满足您的条件,
emp_done
将仅给出第一个实例



同样,您可以使用
next
和生成器表达式,如下所示。但是,生成器表达式有开销,这对于较大的列表来说可能非常昂贵。

因此,本质上,您只想在列表中找到与条件匹配的第一个元素。
id
字段是否唯一?换句话说:您的输出是否总是包含一个项目?为什么要使用理解来完成此操作?我这样问是因为似乎没有必要做你想做的事情。是的,id字段将是唯一的。所以本质上你只想在列表中找到第一个匹配条件的元素?id字段是否唯一?换句话说:您的输出是否总是包含一个项目?为什么要使用理解来完成此操作?我这样问是因为似乎没有必要做你想做的事情。是的,id字段将是唯一的。这不仅仅是另一种方法。这是最有效的方法,因为一旦找到满足条件的结果,我们就停止循环。这不会发生在列表理解中。哦,生成器!这不仅仅是另一种方式。这是最有效的方法,因为一旦找到满足条件的结果,我们就停止循环。这不会发生在列表理解中。哦,生成器!这实际上没有多大意义,即使它确实提供了期望的结果。为什么要创建一个新的dict?为什么不直接打印(l[0])呢?@Ev.Kounis我的答案不仅给出了
l[0]
而且给出了所有的元素,如果有>1,这实际上没有多大意义,即使它确实提供了期望的结果。为什么要创建一个新的dict?为什么不直接打印(l[0])呢?@Ev.Kounis我的答案不仅给出了
l[0]
如果有>1,它会给出所有的元素,而不是初始化+更新,只要在
中声明它,如果
@Ev.Kounis,你就可以这样做。但是,在这种情况下,
emp_done
可能作为变量存在,也可能不作为变量存在。我不是一个pythonicness方面的专家,但是如果emp_完成了,我宁愿有一个空的dict和test
,如果必要的话。@jpp说得好。但是,您可以初始化并重新声明\覆盖,前提是重新声明可能比
更新
方法更快。或者,您可以在
if
@Ev.Kounis中简单地声明它,而不是初始化+更新。但是,在这种情况下,
emp_done
可能作为变量存在,也可能不作为变量存在。我不是一个pythonicness方面的专家,但是如果emp_完成了,我宁愿有一个空的dict和test
,如果必要的话。@jpp说得好。但是,您可以初始化并重新声明\覆盖,前提是重新声明可能比
update
方法更快。