Порядок печати элементов в словаре - PullRequest
0 голосов
/ 27 сентября 2018

Параметр словаря должен содержать все ключи ['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', 'b', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'l', 'l', 'l', 'l', 'l', 'l', 'l', 'l', 'l', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 't', 't', 't', 't', 't', 't', 't', 't', 't']

Ожидается:

['f',  'f',  'f',  'f',  'f',  'f',  'f',  'f',  'f',  'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'l', 'l', 'l', 'l', 'l', 'l', 'l', 'l', 'l', 't', 't', 't', 't', 't', 't', 't', 't', 't', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u',]

1 Ответ

0 голосов
/ 27 сентября 2018

Ваше понимание списка производит элементы в соответствии с порядком значений 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)
...