【发布时间】:2021-12-30 01:10:49
【问题描述】:
我正在尝试将 Python 2 字典迁移到 Python 3。
dict 的排序行为当然发生了变化:
-
Python 2:无序 - 但实际上在使用相同键值对的代码的后续调用之间似乎是确定性/一致的从我的角度来看是计算机科学领域)。
-
Python 3.7+:保证插入顺序。
我正在遍历字典的元素并将键值对添加到另一个结构中,这种方式是依赖于顺序的dict 值的函数。具体来说,我根据元素与某些地标(“最近的邻居”)的几何接近度来删除元素。如果顺序发生变化,则移除顺序发生变化,结果不一样。
我正在尝试重现 Python 2 对插入顺序的精确修改。这可以被认为是一个 python 函数或“行为”。那么,如何在 Python 3.7+ 中复制 Python 2 dict 排序?
注意事项:
-
当然,我可以在 Python 2(或 3.7)中使用
OrderedDict并且经常这样做(并且应该在此处使用)。但是出于这个问题的目的,请不要建议它,或者不使用它是一个坏主意等。 -
我可以重新排序原始字典的键。这可能是解决难题的途径吗?一般来说,Python 2 可以在 Python 3 中“模拟”吗?
【问题讨论】:
-
您要解决什么问题,或者这纯粹是出于您的好奇心?在什么情况下,现在订购的 dicts 是迁移的问题?
-
注意字典在 Python 3.7+ 中仍然没有语义排序 - 例如,相等比较会忽略顺序。这感觉很像XY problem,你能提供导致你问这个问题的背景吗?
-
"我可以重新排序原始字典的键。" - 如 Python 2 代码中的字典?您可以这样做,但不能使用 OrderedDict,这似乎很奇怪。
-
"Python 2 dict ordering" 没有任何意义,因为没有 [你可以依赖的] 排序形式。因此,您似乎需要 Python 3+ 中的某种 UN 有序字典。好吧,您可以使用原始字典并根据从原始字典中提取的随机样本(键)构建一个新字典。但是为什么???
-
比起任务本身,我更困惑于你认为或不认为可行的具体替代方案。
标签: python python-3.x python-2.7 dictionary