Python 字典中元素的打印顺序

Python 字典中元素的打印顺序,python,dictionary,printing,iteration,python-2.x,Python,Dictionary,Printing,Iteration,Python 2.x,字典parm应该包含所有键['f'、'r'、'b'、'l'、't'、'u'],只有在这样的情况下,才会出现以下情况。下面提到的迭代以意外的顺序打印,请更正错误 parm = {'r':'r', 'l':'l', 't':'t', 'u':'u', 'f':'f', 'b':'b'} if all(key in parm for key in ['f', 'r', 'b', 'l', 't','u']): parm = [_ for _ in parm.values() for i in ra

字典parm应该包含所有键['f'、'r'、'b'、'l'、't'、'u'],只有在这样的情况下,才会出现以下情况。下面提到的迭代以意外的顺序打印,请更正错误

parm = {'r':'r', 'l':'l', 't':'t', 'u':'u', 'f':'f', 'b':'b'}
if all(key in parm for key in ['f', 'r', 'b', 'l', 't','u']):
  parm = [_ for _ in parm.values() for i in range(0,9)]
  print (parm)
返回:

['b','b','b','b','b','b','b','b','f','f','f','f','f','l','l','l','l','l','l','l','l','r','r','r','r','r','r','u','u','u','u','t','t'] 预期:

[f',f',f',f',f',f',f',f',r',r',r',r',r',r',b',b',b',b',b',b',b',b',b',b',b',l',l',l',l',l',l',t',t',t',t',t',t',u',u',u',u',u',u',u',u',]
列表理解根据parm dict值的顺序生成项,这在Python 3.6之前是非常任意的,因此它自然不会遵循if语句条件中使用的键的顺序。如果希望以与条件中使用的键相同的方式对键重新排序,则应将其作为单独的列表,并将其用于条件和列表:

parm = {'r':'r', 'l':'l', 't':'t', 'u':'u', 'f':'f', 'b':'b'}
keys = ['f', 'r', 'b', 'l', 't','u']
if all(key in parm for key in keys):
  parm = [parm[key] for key in keys for i in range(0,9)]
  print (parm)

愚弄。并且您的代码仍然无效。请更新代码,它现在有效。在Python 3.6之前的版本中,字典中项目的顺序未定义。要在早期版本中保持顺序,请使用而不是常规dict。您似乎依赖于按特定顺序获取字典值。除了Python的最新版本(2.x当然不是)之外,字典在所有版本中都不是这样工作的。另外,为什么您希望以这种顺序返回值?这就是它们在列表中的排序方式,但那又怎样?这没有关系。这是使用collections.OrderedDict的好选择,在所有情况下都不可能使用collections.OrderedDict。