【问题标题】:python function that contains a dict, takes a key and returns a value from that dict包含字典的python函数,获取一个键并从该字典返回一个值
【发布时间】:2014-09-28 19:46:55
【问题描述】:

我正在尝试编写一个接受特定字典键并将该字典值作为字符串返回的函数。下面我尝试传入一个可以是 1-4 的键并让它返回关联的值。我该如何正确地做到这一点?这是我最好的猜测,它只返回所有章节,这不是我想要的。

def function(chapter_key):
    chapters = {
        1: '["chapter_1"]',
        2: '["chapter_2"]',
        3: '["chapter_3"]',
        4: '["chapter_4"]'
    }
    return chapters

所以调用函数(1)将返回“chapter_1”

在一些 cmets 之后进行了一些编辑。

【问题讨论】:

  • 您的值是否总是包含一个字符串条目?
  • 这是一个有效的python语法吗??
  • 不,我怀疑这是有效的语法,这就是我出错的地方。类似于语法以及如何使用适当的键实际调用函数以获取我正在寻找的值。这就是我寻求帮助的原因。我找不到正确方法的示例。这只是我要求做的最好的猜测。
  • 定义字典的正确方法chapters = {1: '["chapter_1"]',2: '["chapter_2"]',3: '["chapter_3"]',4: ["chapter_4"]'}然后return chapters[chapter_key]
  • 我可以这样做,但是在使用函数时如何传入键并获取值?如果我不使用函数,那么我可以完全遵循 python 文档并使用 chapters[1] 检索值,这将返回我想要的字符串。

标签: python function dictionary key key-value


【解决方案1】:

{'key':'value'}.get('key', None) 返回'value'

请记住,方法是对象,任何需要函数的东西也可以从对象中取出方法。

如果您必须制作自己的功能...

NO_KEY = object()

def f(ch):
    chap = {
        1: 'foo',
    }
    return chap.get(ch, NO_KEY)

chapter = f(1)
print(chapter if chapter is not NO_KEY else 'There was no chapter')

在这里,我使用的是 dict.get 的两个参数形式。如果字典中不存在键(第一个参数),则第二个参数是默认值。您将这样做以检查返回的值是否对您有用。默认情况下,如果没有第二个参数,.get 将返回 None,但如果 None 是字典中的有效值,它作为哨兵值不是很有用。

“使用 .get”的说法有点啰嗦

【讨论】:

  • 谢谢。所以听起来像使用函数只是我所要求的额外不必要的步骤。这可能就是为什么我没有找到它的例子。
  • 如果字典不包含第一个参数中的键,则 .get 的第二个参数是默认值。这可以防止应用程序在密钥不存在时崩溃和烧毁。它比尝试包装它便宜很多......除了结构
  • 我知道 dict.get 是如何工作的,我的意思是 None 是默认返回的,所以为什么要添加它,如果你要添加一些东西,实际上输出类似“key does”之类的东西可能会更好不存在”?
  • ... getattr 的习惯。不过,这不是一个坏习惯。 None 是“密钥不存在”指示符。如果您的 dict 实际上包含 None 作为有效值,则可以使用其他一些标记值,例如 object() (例如,在 is 检查中使用。但不要认为添加到答案中是合适的)
  • 我的意思是解释dict.get 的作用,你没有解释你的代码在做什么或.get 的第二个参数是什么,使用一个值将是无论如何默认返回
【解决方案2】:

我猜这会起作用:

def function(chapter_key):
    chapters = {
        1 : 'chapter_1',
        2 : 'chapter_2',
        3 : 'chapter_3',
        4 : 'chapter_4'
    }

    chapter_name = chapters[chapter_key]
    return chapter_name

【讨论】:

  • 如果 chapter_key 是 5... 或 '5' 怎么办?使用两个参数 .get() 代替。
  • 你是绝对正确的 - 必须单独控制键并有一个有效的键作为参数。当然,您提出的方法是绝对有效的,无需进行错误处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多