在字典中搜索值并返回包含相应键和值的新字典

时间:2016-04-13 00:42:04

标签: python dictionary search

让我说我有这个学龄前孩子的字典。关键是名称和值代表:喜欢的颜色,年龄和头发颜色。

    preschool_kids={"Suzie":("purple", 4, "brown"), 
"Michael":("blue", 3, "blond"), "Jane":("purple",5, "black")}

因此,我正在测试这些学生最喜欢的颜色中哪一个是紫色的,并且想要以下输出:

{"Suzie":("purple", 4, "brown"),"Jane":("purple",5, "black")}

我已完成以下操作(使用上面的字典)试图获得该结果:

def search(values, color):
    d={}
    for key,value in preschool_kids.items():
        colors=value[0]

        if color in colors:
            d= (key, value)
            print(d)

print (search(preschool_kids, "purple")) 

但我不断出来:

('Suzie', ('purple', 4, 'brown'))
('Jane', ('purple', 5, 'black'))

如何使用我的代码而不是元组的搜索结果来形成新词典?它似乎肯定会给我正确的要求,但不是我想要的输出。

另外,由于我对Python很陌生,所以我不想导入东西,因为我没有太多的经验或对不同的导入库有充分的了解。

2 个答案:

答案 0 :(得分:1)

问题

d = (key,value)是将键分配给字典中的值的错误方法。这会创建一个元组 (key,value)并将其分配给d,将其先前的存在重写为字典。

最佳解决方案

使用词典理解。这是聪明的方式:

result = {k: v for k,v in preschool_kids.items() if v[0] == color}

这会创建一个只包含所需结果的新词典。

天真的解决方案(以及在词典中分配的正确方法)

天真的做法是:

d={}
for key,value in preschool_kids.items():
    if value[0] == color:
        d[key] = value # right way to assign a value to a key
print(d) # this prints the entire dictionary, and not the dictionary at each step

答案 1 :(得分:0)

你很亲密!您只需更新您在函数中构建的字典,将学生的姓名映射到其属性并将其返回:

preschool_kids = {
    "Suzie": ("purple", 4, "brown"),
    "Michael": ("blue", 3, "blond"), "Jane":("purple",5, "black")
}

def search(values, color):
    students_with_favorite_color = {}
    for name,attrs in preschool_kids.items():
        students_favorite_color = attrs[0]

        if students_favorite_color == color:
            students_with_favorite_color[name] = attrs

    return students_with_favorite_color

print(search(preschool_kids, 'purple'))
相关问题