Python 将排序列表转换为字典,Google Colab 和 Pycharm 的区别

Python Casting a sorted list to dictionary, difference in Google Colab and Pycharm

chars = dict(sorted(crops.items(),key=lambda kv: kv[1].size, reverse=True)[:4])

我正在创建一个字典 chars,它将计数变量(任何整数值)映射到我以前字典 crops 中的四个最大裁剪值。

我是 运行 Google Colab 和 Pycharms 中的上述行,它为我提供了不同的字典。在 Colab 中,它从下面的列表中给出了我想要的(注意:从列表中删除了很多行)。它保留列表的顺序 { (6, crop1), (7,crop2) , (2, crop3) , (3, crop4) } .

然而,在 pycharms 中,输出是 { (2, crop3) , (3, crop4), (6, crop1), (7,crop2)} ,它仍然获得最大的四种作物,但是通过将其转换为 dict() ,它似乎按计数对字典中的列表重新排序变量。

字符列表:

[(6, array([[78, 76, 77, 78, 73, 81, 80, 81, 79, 72, 77, 78, 71, 73, 78, 81,
        82, 79, 76, 74, 75, 85, 86, 78, 76, 84, 85, 80, 78, 73, 76],
      ..., (7, array([[89, 90, 87, 83, 82, 83, 77, 76, 75, 74, 71, 73, 74, 77, 77, 80,
        77, 75..., (3, array([[ 79,  77,  81,  74,  80,  85,  83,  79,  74,  77,  74,  76,  78,
        ...]

我不确定是什么原因造成的,绝对需要一些帮助。也许 PyCharms 也有问题,代码在 Gazebo 模拟中是 运行 实时的,所以也许这会改变 dict() 投放我的列表的方式?

字典是一种继承无序的数据结构 - 句点。

python (*) 中的字典是插入排序的 - 放入其中的第一项也是最先打印的。

(*) 适用于 python 3.7 及更高版本 - 低于 3.7 的字典可能会被随机排序或(实现细节)也被插入排序。

如果您得到不同的排序,您要么以不同的顺序插入,要么 运行 完全不同的版本 python。

How do I detect the Python version at runtime?

如果您使用 python >= 3.1 的早期版本,您可以使用 collections.ordereddict