首页 > 解决方案 > 在元组中查找整数,它是字典中的键

问题描述

字典中的键由具有不同整数的不同元组组成,我需要使用该整数打印字典中的所有值。

我尝试使用 dictionary.get() 和 dictionary.values() 结合不同的 for 循环来获取值。

#Vegetarian = 1
#Vegan = 2
#Gluten-free = 3
a = tuple([0])
# "Joe's Gourmet Burger"

b = tuple([1,3])
# "Main Street Pizza Company"

c = tuple([1,2,3])
# "Corner Cafe"

d = tuple([1])
# "Mama's Fine Italian"

e = tuple([1,2,3])
# "The Chef's Kitchen"

rest = {a:"Joe's Gourmet Burger",
        b:"Main Street Pizza Company",
        c:"Corner Cafe",
        d:"Mama's Fine Italian",
        e:"The Chef's Kitchen"}

food = set()
veg = input("does anyone need vegetarian? yes/no ")
if veg == "yes":
    food.add(1)

vegan = input("does anyone need vegan? yes/no ")
if vegan == "yes":
    food.add(2) 


glut =input("does anyone need gluten free? yes/no ")
if glut == "yes":
    food.add(3)

for num in food:
    print(num)
    print(rest[num])  

这将为您提供所选过敏的价值。我所希望的是字典能够识别元组中的键,然后打印出相应的餐馆。此外,如果用户选择了多种过敏症,则脚本应仅返回满足用户所有过敏症的餐馆。

我得到的是“在 0x000001ACC9DA4A68 处获取 dict 对象的内置方法”

标签: pythondictionary

解决方案


如果用户对任何问题回答“是”,您是否尝试打印出这些值?

如果是这样,这不会完全让您到达那里,但它应该为您指明正确的方向:

for num in food:
    for k in rest.keys():
        if num in k:
            print(rest[k])

如果我理解正确,您需要检查每个字典的键(即每个元组)中是否存在给定的数字。

就@Michael Butscher 而言,这不会很有用,因为您将拥有重复的密钥。相反,您可以将数据结构重组为每个键都有一个餐厅列表的东西:

requirements = {
    0: "None",
    1: "Vegetarian",
    2: "Vegan",
    3: "Gluten-free"
}
requirement_restaurant_map = {
    0: ["Joe's Gourmet Burger"],
    1: ["Main Street Pizza Company", "Corner Cafe", "Mama's Fine Italian", "The Chef's Kitchen"],
    2: ["Corner Cafe", "The Chef's Kitchen"],
    3: ["Main Street Pizza Company", "Corner Cafe", "The Chef's Kitchen"]
}

food = set()
veg = input("does anyone need vegetarian? yes/no ")
if veg == "yes":
    food.add(1)

vegan = input("does anyone need vegan? yes/no ")
if vegan == "yes":
    food.add(2) 

glut = input("does anyone need gluten free? yes/no ")
if glut == "yes":
    food.add(3)

intersection = []
for num in food:
    for k in requirements:
        if num == k:
            if not intersection:
                intersection.extend(requirement_restaurant_map[k])
        else:
            intersection = list(set(intersection).intersection(set(requirement_restaurant_map[k])))

print(f"The following restaurants satisfy your requirements...\n {intersection}")

推荐阅读