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

时间:2018-08-09 10:47:40

标签: 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': "932342384758", 'role': 'Manager'},
            {'id':3,'name': "Joanna", 'last_name': "Kenderson", 'email':'kjjsdakjae@kkzbigg.com', 'phone': '9876478398478', 'role': 'Employee'}
            ]

我想创建一个选择单个字典的理解并将其添加到包含单个字典的新变量中:

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

emp_done = {}
for employee in sel_employee:
    emp_done = employee

换句话说,如何将上述理解后的所有内容添加到所说的理解中?

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

4 个答案:

答案 0 :(得分:4)

这是另一种方法。 如果未找到sel_employeeNone的字典,它也会将id == 2设置为True

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

答案 1 :(得分:2)

这不仅是您想要的吗?

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

答案 2 :(得分:0)

或者:

l = [employee for employee in employees if employee['id'] == 2]
print({1:l[0]}.get(len(l),l))

输出:

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

答案 3 :(得分:0)

您可以使用简单的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与根据@Ozzy's solution的生成器表达式一起使用。但是,生成器表达式的开销对于较大的列表可能是昂贵的。