当前位置: 首页 > 面试题库 >

将dict转换为OrderedDict

左丘智渊
2023-03-14
问题内容

我在collections.OrderedDict上课时遇到了麻烦。我在Raspbian(Raspberry
Pi的Debian发行版)上使用Python
2.7。我正在尝试打印两个字典,以便进行文本冒险的比较(并排)。该顺序对于准确比较至关重要。无论我尝试什么,词典都以通常的无序方式打印。

这是我在RPi上执行的操作所得到的:

import collections

ship = {"NAME": "Albatross",
         "HP":50,
         "BLASTERS":13,
         "THRUSTERS":18,
         "PRICE":250}

ship = collections.OrderedDict(ship)

print ship
# OrderedDict([('PRICE', 250), ('HP', 50), ('NAME', 'Albatross'), ('BLASTERS', 13), ('THRUSTERS', 18)])

显然有些不对劲,因为它正在打印函数调用并将键和值组放入嵌套列表中。

这是通过在PC上运行类似内容得到的:

import collections

Joe = {"Age": 28, "Race": "Latino", "Job": "Nurse"}
Bob = {"Age": 25, "Race": "White", "Job": "Mechanic", "Random": "stuff"}

#Just for clarity:
Joe = collections.OrderedDict(Joe)
Bob = collections.OrderedDict(Bob)

print Joe
# OrderedDict([('Age', 28), ('Race', 'Latino'), ('Job', 'Nurse')])
print Bob
# OrderedDict([('Age', 25), ('Race', 'White'), ('Job', 'Mechanic'), ('Random', 'stuff')])

这次是有秩序的,但是它不应该打印其他东西吗?(将其放入列表并显示函数调用。)

我在哪里犯错误?它与pi的pi版本无关,因为它只是Linux的版本。


问题答案:

您正在创建一个字典 第一 ,然后传递一个字典来的OrderedDict。对于<3.6
(*)的Python版本,到您这样做时,排序将不再正确。dict本质上是无序的。

依次传递一个元组序列:

ship = [("NAME", "Albatross"),
        ("HP", 50),
        ("BLASTERS", 13),
        ("THRUSTERS", 18),
        ("PRICE", 250)]
ship = collections.OrderedDict(ship)

打印时看到的OrderedDict是它的 表示形式 ,它是完全正确的。OrderedDict([('PRICE', 250), ('HP', 50), ('NAME', 'Albatross'), ('BLASTERS', 13), ('THRUSTERS', 18)])只是以可 再现的方式
向您显示的内容OrderedDict

(*):在CPython
3.6实现中,该dict类型已更新为使用内存效率更高的内部结构,该结构具有保留插入顺序的快乐效果,并且通过扩展,问题中显示的代码可以正常工作。从Python3.7开始, Python语言规范
已更新,要求所有Python实现必须遵循此行为。



 类似资料:
  • 问题内容: 我如何转换defaultdict 成为普通命令? 问题答案: 您可以简单地致电: 但请记住,defaultdict 是 一个dict: 只是稍有不同的行为,因为当您试图访问一个缺少关键-这通常会提高一个-在被称为改为: 这就是您在字典的数据端出现之前看到的内容。 因此,在不实际制作新对象的情况下恢复更多类似dict的行为的另一个技巧是重置: 但这在大多数情况下都不值得。

  • 我知道一个解决方案可能是将这个dict中的每个键值对转换为dict,这样整个结构就变成了dict的dict,然后我们可以将每一行单独添加到DataFrame中。但我想知道是否有更简单、更直接的方法来做到这一点。 到目前为止,我已经尝试将dict转换为series对象,但这似乎不能保持列之间的关系:

  • 问题内容: 我尝试使用以下行(请求库)POST请求从客户端获取JSON数据: 如何转换成字典? 有用: 但是如何将其转换为dict? 问题答案: 编辑:对于职位要求: 类“ dict” 您可以使用如下形式: 类“ dict”

  • 问题内容: 我正在使用pymongo来查询区域中的所有项目(实际上是在地图上查询区域中的所有场所)。我以前使用过在球形区域中搜索,该区域可以为我返回一本字典,并且在字典中有一个名为的键,其中包含场所。现在,我需要在一个正方形区域中搜索,建议使用,但是,这给了我一个班级,我不知道如何从中提取场地结果。 有谁知道我应该将光标转换为字典并提取结果,还是使用另一种方法来查询正方形区域中的项目?顺便说一句,

  • 问题内容: 考虑一下,数据框: 我想按列将其拆分成字典,像这样: 我发现使用的解决方案是: 还有哪些其他解决方案? 问题答案: 您可以在/上使用/应用:

  • 问题内容: 我是使用subprocess.Popen()从进程的输出中获得的: 对我来说,它似乎不是有效的json。我已经使用和,但是没有运气。有人可以在正确的方向帮助我吗?提前致谢。 问题答案: 确实,导出ECMA脚本而不是JSON的旧版本。根据此debian错误报告,升级1.4.8应该会给您适当的JSON。另请参阅项目CHANGELOG: 现在,通过正确引用xport的键,xport的JSON