【问题标题】:Searching for value in dictionary and return a new dictionary with the corresponding key and value在字典中搜索值并返回具有相应键和值的新字典
【发布时间】:2016-04-13 00:42:03
【问题描述】:

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

    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 很陌生,我宁愿不导入东西,因为我对不同的导入库没有太多经验或完全了解。

【问题讨论】:

    标签: python dictionary search


    【解决方案1】:

    问题

    d = (key,value) 是将键分配给字典中的值的错误方法。这会创建一个 tuple (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
    

    【讨论】:

    • 哇,这对我来说真的很有用。感谢您展示它的“傻瓜”(像我一样)版本以及实现相同功能的更简化和更有效的方式。大约两周前才开始使用字典,所以这对我来说还是很新的,正如你所看到的,我对从我的尝试中创建新字典有点困惑。很好的解释!
    • @Nick 没问题,这就是我们来这里的目的:)
    【解决方案2】:

    你已经接近了!您只需要更新您在函数中构建的字典,将学生的姓名映射到他们的属性并返回它:

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

    【讨论】:

    • 这可行,但我发现不更改 OP 的变量名称选择总是有用的(为了他们的利益 - 这不是我们要更改的代码):)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    相关资源
    最近更新 更多