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
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