让我说我有这个学龄前孩子的字典。关键是名称和值代表:喜欢的颜色,年龄和头发颜色。
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很陌生,所以我不想导入东西,因为我没有太多的经验或对不同的导入库有充分的了解。
答案 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'))