【问题标题】:Search through dictionary key with string, not object使用字符串而不是对象搜索字典键
【发布时间】:2014-07-26 18:23:03
【问题描述】:

我正在尝试从字典中的键中提取值,但是当我搜索键时,我想使用“字符串”而不是对象。现在,使用 dict.get,它告诉我需要搜索带有对象的键,那么是否有另一个内置函数或任何可以搜索带有字符串而不是对象的键的功能?

dict.get('someKey',' ')# looks for the key 'someKey'. If that key isn't found, a blank ' ' is returned

回答后:

谢谢大家!所以它看起来像:

yourDictionary.get('someKey',' ')# looks for the key 'someKey' in dictionary 'yourDictinoary'. If that key isn't found, a blank ' ' is returned

【问题讨论】:

  • 嗯,字符串一个对象。 “不是对象”是什么意思?
  • 我认为一个对象是一个预先声明的变量。我弄错了吗?
  • 如果你有 {'someKey': 10}.get('someKey', '') 这将返回 10。你有什么疑问?
  • 我想我只是误解了.get,但感谢大家提供的信息

标签: python string dictionary key


【解决方案1】:

您的困惑是由于您调用dict.get() 的方式造成的——它是一个实例方法,所以第一个参数,如果在dict 类上调用,应该是一个字典实例。否则,你会得到一个TypeError

>>> dict.get("key", "default")

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    dict.get("key", "default")
TypeError: descriptor 'get' requires a 'dict' object but received a 'str'

如果您在 Python 中使用过 OOP,请注意这与您为类编写的方法中的隐式第一个参数 self 有关。

您可以通过显式传递实例来解决此问题:

>>> d = {}
>>> dict.get(d, "key", "default")
'default'

或者(并且最好),在实例本身上调用方法:

>>> d.get("key", "default")
'default'

至于您的评论,您可以选择使用以下任何一种:

try:
    result = d["key"]
except KeyError:
    result = "default"

if "key" in d:
    result = d["key"]
else:
    result = "default"

result = d["key"] if key in d else "default"

实现与result = d.get("key", "default")相同。

【讨论】:

    【解决方案2】:

    问题是您试图在 dict 类型本身中搜索一个键。这就是解释器说您需要使用对象搜索键的原因。

    你应该先创建一个 dict 对象,然后在其中搜索键(当然,如果你想找到一些东西,在添加一些数据之后)。

    d = dict()  # or d = {}
    d['someKey'] = 1
    print d.get('someKey', ' ')  # will print 1
    print d.get('otherKey', ' ')  # will print a space
    

    【讨论】:

      猜你喜欢
      • 2017-12-01
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      相关资源
      最近更新 更多