我是python的新手。 我当前的版本是: 2.7.16 因此,在代码中我有一个函数:
def func (coords):
xb, yb, xe, ye = coords.values()
print(coords, 'order__') #1
然后我称之为:
func({ 'xb': 0, 'yb': 0, 'xe': 40, 'ye': 20 })
但是后来我发现我在某处出现了错误,因为事情无法正常进行。我添加了打印,它显示了:
({'xb': 0, 'yb': 0, 'ye': 20, 'xe': 40}, 'order__')
因此,如您所见,属性的顺序已更改,这导致解构无法正常工作。 两个问题: 1.为什么会这样? 2.如何使代码正常工作? 我的解决方案是这样做:
xb = coords['xb']
yb = coords['yb']
,依此类推。但是有更好的解决方案吗?可能我还不知道
答案 0 :(得分:2)
dict
仅保留python 3.7的顺序。对于此之前的python版本,您可以使用OrderedDict
>>> from collections import OrderedDict
>>> dct = OrderedDict([('xb', 0), ('yb', 0), ('xe', 40), ('ye', 20)])
>>> func(dct)
答案 1 :(得分:1)
Python中的字典不一定是有序的,尽管在某些情况下某些版本可能会按顺序排序,但您应该从不依靠它。如果要按顺序解压缩值,则存在collections.OrderedDict。我不知道您的情况,但也许只是使用一个元组或列表来保存它(因为您的值'xb'
,'yb'
,'xe'
和'ye'
似乎是变量名和键。这似乎是一个XY问题)。