【问题标题】:Build function that iterates through a dictionary via specific keys mentioned in the function构建函数,通过函数中提到的特定键遍历字典
【发布时间】:2021-09-02 03:08:10
【问题描述】:

我的函数包含一个全局汽车字典,我正在尝试构建一个函数来总结三个汽车价格并返回它。如果你没有找到汽车,那么它会专门返回函数中提到的汽车的名称,说明它不存在。

这是我的字典:

CARS = {
  "Honda Accord": 2500,
  "Ford Mustang": 30000,
  "Mercedez Benz C63": 54000,
  "Audi A4": 35000,
  "Toyota Camry": 2300
}

下面是函数的工作方式:

def func(car1,car2,car3):
    for k in CARS.keys():
        return CARS[car1] + CARS[car2] + CARS[car3]
    #if k not in CARS.keys():
    #    return f'{k} not found'

最后一个 elif 是我遇到问题的地方。第一个 for 循环工作正常。我想输出如果用户输入了“Skoda”但它不在字典中,它应该打印出Skoda not found。另外,有没有更简洁的方法呢? TIA

编辑 大家好,好吧,为奇怪的语法和逻辑道歉。我基本上接受了 3 个字符串,我想检查这些字符串是否在字典中,如果是,则返回它们的值的总和,打印出字典中未提及的那些特定汽车型号并说未找到“汽车模型”。就是这样。

【问题讨论】:

  • 哦还有,输入都是字符串。
  • 您的代码不会这样工作,缩进完全关闭,逻辑也没有意义。首先,检查所有键是否都在字典中,然后打印一条消息或返回它的值。
  • @JanWilamowski 忘记添加缩进。
  • 这仍然不是有效的语法。 for 循环没有elif,只有 else(这在这里没有意义)。另外,如果您只是返回值而不检查第一次迭代,为什么还要迭代所有键?
  • 你想在这里做什么? k 来自哪里?代表什么?

标签: python python-3.x dictionary


【解决方案1】:

这适用于 Python 3.8.5:

CARS = {
  "Honda Accord": 2500,
  "Ford Mustang": 30000,
  "Mercedez Benz C63": 54000,
  "Audi A4": 35000,
  "Toyota Camry": 2300
}

def func(car1,car2,car3):
    cars_list = [car1,car2,car3]
    try:
        return sum([CARS[i] for i in cars_list])
    except Exception as e:
        return f'{e.args[0]} not found'
print(func('Honda Accord', 'Ford Mustang', 'Audi A4'))
print(func('Honda Accord', 'Ford Mustang', 'Skoda'))

输出:

67500
'Skoda not found'

【讨论】:

  • 所以本质上:这就是你所做的,将输入转换为列表,使用列表理解。我只是不明白 e.args[0] 位,它是否找到了不存在的对象?
  • 顺便说一句,非常感谢!想让您知道这也不是一项任务:) 这只是我正在做的小挑战!我想这就是为什么其他人没有那么好..
  • 嗨,e 这里是异常内容。由于它是 KeyError,因此在 dict 中找不到的键将在异常内容 eargs 属性中,以元组格式。 e.args[0] 返回未找到的密钥。所以,我只是在 f 字符串中返回了eargs 属性的第一个索引(通过使用e.args[0])。不客气。感谢您接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
相关资源
最近更新 更多