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

2024-03-29 15:57:26 发布

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

假设我有一本学龄前儿童词典。关键是名称和表示的值:最喜欢的颜色、年龄和头发颜色。你知道吗

    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还比较陌生,所以我不想导入东西,因为我对不同的导入库没有太多的经验或充分的理解。你知道吗


Tags: keyinsearch字典value颜色colorkids
2条回答

问题

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

你很接近!您只需更新正在函数中构建的词典,即可将学生姓名映射到其属性并返回:

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'))

相关问题 更多 >