【问题标题】:Dict to tuple : why does it not take all values?元组的字典:为什么它不采用所有值?
【发布时间】:2021-04-30 07:51:01
【问题描述】:

我将字典转换为元组,因此它可以是可散列的。

DATA_ILLUMINANTS = {
'LED': tuple({
    380.0: 0.006,
    385.0: 0.013,
    ...
    780.0: 0.108,})
    }

当我打印元组时,没有第二列数据,它是:

(380.0, 385.0, 390.0, 395.0, 400.0, ... , 780.0)

知道为什么吗?

我在另一个代码中使用“LED”元组,它返回以下错误:AttributeError: 'tuple' object has no attribute 'shape',我想这是因为元组中缺少数据。

【问题讨论】:

  • 您用于转换的邮政编码以及您期望得到的。
  • 当您遍历字典时,您会遍历它的。你期待什么输出 - tuple({...}.items()),也许?
  • “tuple object has no attribute 'shape'”错误是该代码需要一个 Numpy 数组的症状,但这是另一个蠕虫。
  • 字典值不必是可散列的。只有钥匙可以。您可以按原样使用 dict;无需将其转换为元组。
  • 如果您将 dict 文字转换为元组,如您的示例所示,为什么不首先使用元组文字?

标签: python tuples hashable


【解决方案1】:

遍历 dict(例如 tuple() 所做的)遍历键。

你会希望 tuple({...}.items()) 得到一个 2 元组的元组。

>>> x = {1: 2, 3: 4, 5: 6}
>>> tuple(x)
(1, 3, 5)
>>> tuple(x.items())
((1, 2), (3, 4), (5, 6))
>>>

【讨论】:

  • 迭代顺序可能无法预测。对项目进行排序也是明智之举。
  • @JohnKugelman 这取决于使用的 CPython 版本和 OP 的用例,但是是的 :)
  • @JohnKugelman 从 CPython 3.6 开始有效,并且从 Python 3.7+ 正式开始,dict 对象保持插入顺序。
  • 对,这就是为什么我用“可能”来对冲的原因。为了清楚起见,我建议进行排序。
【解决方案2】:

tuple() 将遍历给定的对象,这里是一个字典。 dict 遍历键,这就是原因。您可以强制它遍历项目: tuple({ 380.0: 0.006, 385.0: 0.013, ... 780.0: 0.108,}.items() )

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    相关资源
    最近更新 更多