【问题标题】:comparison between the elements of list with keys of dictionary列表元素与字典键的比较
【发布时间】:2010-07-19 06:19:30
【问题描述】:

我需要检查某个字典中是否存在特定键。我可以使用 has_key 吗?有没有其他方法可以将列表中的项目与字典的键进行比较。

我有一个类似...[(3,4),(4,5)..] 的列表 我需要检查字典中是否有 (3,4)。

【问题讨论】:

  • has_key() 在更高版本的 Python 2 中已弃用,并已从 Python 3 中删除。请使用 Michael Anderson 的解决方案。

标签: python dictionary


【解决方案1】:

这样的?

>>> d = { (1,3):"foo", (2,6):"bar" }
>>> print (1,3) in d
True
>>> print (1,4) in d
False
>>> L = [ (1,3), (1,4), (15) ]
>>> print [ x in d for x in L ]
[True, False, False]

如果你想添加缺失的条目,你需要一个显式循环

for x in L:
  if x not in d:
    d[x]="something"

【讨论】:

  • 如果我想检查字典中是否有可用的密钥...如果没有...然后将该密钥添加到字典...??
  • 这是一个新问题,但请看一下setdefault() 方法。 docs.python.org/library/…
  • 更新方法怎么样。我认为,如果字典中已经存在该键,它将放置该键的另一个值,因此我们通过更新方法获得多个条目。
【解决方案2】:

“正确”的方法是使用 in 运算符,就像其他答案提到的那样。这适用于任何可迭代的东西,当您可以通过散列查找内容时(例如字典和集合),您可以获得一些速度提升。还有一种旧方法仅适用于字典,即has_key 方法。这些天我通常看不到它,而且速度也很慢(虽然不是很多)。

>>> timeit.timeit('f = {(1,2) : "Foo"}; f.has_key((1,2))')
0.27945899963378906
>>> timeit.timeit('f = {(1,2) : "Foo"}; (1,2) in f')
0.22165989875793457

【讨论】:

    【解决方案3】:

    dictionary.keys() 返回键列表 然后你可以使用if (3,4) in d.keys()

    【讨论】:

    • 不需要。 in 运算符在应用于字典时将查看字典的键。
    猜你喜欢
    • 1970-01-01
    • 2017-06-21
    • 2021-04-13
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多