属性顺序在字典中更改

时间:2019-07-19 17:30:06

标签: python properties

我是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']

,依此类推。但是有更好的解决方案吗?可能我还不知道

2 个答案:

答案 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问题)。