Если вы хотите сохранить indicies (от Перечислим), то вы будете иметь, чтобы распаковать ключ и значение из элементов Dict отделяющее. Прямо сейчас то, что вы вызываете k
, на самом деле является индексом, а то, что вы вызываете v
, фактически является парой ключ-значение. Попробуйте что-то вроде этого:
for i, (k, v) in enumerate(my_dict.iteritems(), start=1):
print i, k, v
Это приводит к чему-то вроде:
1 key_two 2
2 key_one 1
3 key_three 3
Чтобы получить их отформатирован знаком равенства, вы должны изменить оператор печати на print i, "{}={}".format(k, v)
, что приведет к что-то вроде:
1 key_two=2
2 key_one=1
3 key_three=3
Если вам нужно получить ключи в последовательном порядке, используйте sorted()
, например:
for i, (k, v) in enumerate(sorted(my_dict.iteritems()), start=1):
...
Или, если вы хотите отсортировать по значениям первого вместо ключей первым, вы можете задать key
функцию для sorted()
вызова. Это будет выглядеть так: sorted(my_dict.iteritems(), key=lambda (x, y): (y, x))
. Это даст вам выход
1 key_one=1
2 key_two=2
3 key_three=3
Да, за исключением того, что стоит отметить, что словарь неупорядочен, поэтому перечисление имеет очень ограниченное значение – brianpck
С учетом сказанного, если я запустил этот скрипт на другой машине, перечисление будет отличаться от моего? Я заметил, что порядок, в котором пары вводятся в изменениях, если я вызываю iteritems() на dict ... – beetroot
@beetroot Да. Это по дизайну. Python не гарантирует, что элементы в dict будут извлекаться в любом конкретном порядке (это связано с тем, что словари обычно реализуются на низком уровне). Если вы хотите получить последовательный заказ, вы можете отсортировать элементы. См. Мое редактирование ответа, чтобы узнать, как это сделать. – user3030010