【问题标题】:What is the result type of OrderedDict in python?python中OrderedDict的结果类型是什么?
【发布时间】:2022-06-22 21:51:54
【问题描述】:

对不起,如果这是一个菜鸟问题,但关于 OrderedDict 它的类型究竟返回了什么?例如下面的代码

od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
od['d'] = 4
print(od)

结果是:

OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])

结果集似乎是列表中的一对元组,对吗?但实际上我能够像访问字典一样访问它:

print(od['a'])
1

您能否澄清一下我出了什么问题以及结果是如何解释的? 问候

【问题讨论】:

  • OrderedDict 的 str 表示向您传达了它是有序的事实。这是一个键值元组的有序列表
  • 您正在打印有序 dict 的表示,它向您展示了创建相同有序 dict 的一种方法。
  • 谢谢,但为什么它的格式像元组?这让我很困惑
  • @Amir 因为od == OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)]) -> True
  • 因为 dict 构造函数可以采用 2-tuples 的可迭代对象并将其变成 dict。您可以复制粘贴结果并运行它以重新创建相同的OrderedDict。此外,dict([('a', 1), ('b', 2), ('c', 3), ('d', 4)]) 也可以正常工作

标签: python


【解决方案1】:

OrderedDictrepr 展示了如何构造等效的 OrderedDict

在 3.7 之前,没有语言保证订购纯 dicts,因此它不能使用 dict 作为“参数”,而是选择使用 listtuple s 作为半任意可用有序序列。但这只是显示您将传递给构造函数以重新创建它的内容,它仍然是dict,因此不涉及任何功能或lists 或tuples。

他们可以此时将repr 更改为使用dict 文字,但我怀疑他们不会确保依赖旧repr 格式的代码(例如文档测试)不会损坏(毕竟它看起来是什么样子并不重要,只要它准确地描绘了某种重新创建它的方式)。

【讨论】:

    【解决方案2】:

    OrderedDict 的类型是OrderedDict:

    >>> type(od)
    <class 'collections.OrderedDict'>
    

    它是dict 的子类型,这就是为什么你可以像普通字典一样使用它:

    >>> issubclass(OrderedDict, dict)
    True
    >>> isinstance(od, dict)
    True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-30
      • 2014-03-21
      • 2017-07-12
      • 1970-01-01
      • 2013-03-30
      • 2016-07-13
      • 1970-01-01
      • 2016-10-06
      相关资源
      最近更新 更多