【问题标题】:What is the problem with dictionary while using tuple as a key?使用元组作为键时字典有什么问题?
【发布时间】:2022-06-14 16:01:38
【问题描述】:

我创建了一个简单的字典,其中元组是键

a = {(1, 2): 1, (2, 3): 2}

这两个都给出了相同的结果:

print(a[1, 2])
print(a[(1, 2)])

结果是1

为什么?

【问题讨论】:

  • 您期待什么行为?你认为a[1, 2] 应该返回什么?
  • 1,2 和 (1,2) 都是编写元组的方式。因此,您使用相同的密钥并因此获得相同的结果。
  • @0x5453 我只是困惑
  • 您需要记住,构成元组的不是括号,而是逗号
  • @OlvinR​​oght 你明白了

标签: python dictionary


【解决方案1】:

1, 2(1, 2) 都是元组。您可以自己确认:

a = 1, 2
b = (1, 2)
print(type(a))  # <class 'tuple'>
print(type(b))  # <class 'tuple'>

因此,a[1, 2]a[(1, 2)] 是等价的。

您只需要在语法可能不明确的某些上下文中为元组的元素加上括号。例如,当传递函数 args 时:f(1, 2) 将两个参数传递给 f,但 f((1, 2)) 将单个两项元组传递给 f

在没有歧义的所有其他上下文中,可以省略元组周围的括号。字典查找就是这样一种上下文。

【讨论】:

  • 索引稍微复杂一些。逗号是扩展切片语法的一部分,允许像d[:, 1:, ::-1] 这样的东西,其中索引不是单个元组,而是由逗号分隔的多个切片结构。 (不过,最终结果是一个由每个单独切片的结果组成的元组。)
猜你喜欢
  • 2020-09-25
  • 1970-01-01
  • 2010-11-28
  • 2018-12-20
  • 2010-12-28
  • 1970-01-01
  • 2011-12-25
  • 2012-02-20
  • 2021-03-13
相关资源
最近更新 更多