Как напечатать текущий номер цикла в итерации по словарю в Python? - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть словарь

>>>d = {"a":"apple", "c":"cat", "d":"dog"}

Этот словарь должен быть напечатан для вывода в следующем формате:

1. apple
2. cat
3. dog

Если у меня есть для использования спискачтобы сделать это, как бы мне заставить его также напечатать текущий номер итерации, то есть 1, 2 или 3, как указано выше.

Это то, что у меня есть, и оно просто печатает значения dict на новых строках, но это далеко от того, что я хочу.

>>>temp =  "\n".join( [d[i] for i in d] )
>>>print temp
  • Кроме того, полезно ли это дляиспользовать генератор вместо понимания списка здесь?
  • Окружающая среда: Python 2.7

Ответы [ 3 ]

4 голосов
/ 22 февраля 2012
In [90]: for i,arr in enumerate(d.values(), 1):
   ....:     print i, arr
   ....:     
   ....:     

1 apple
2 cat
3 dog
3 голосов
/ 22 февраля 2012

Сортировка по значению:

print '\n'.join('{}. {}'.format(i, d[k]) for (i,k) in enumerate(sorted(d, key=d.get), 1))
1. apple
2. cat
3. dog

Сортировка по ключу:

>>> print '\n'.join('{}. {}'.format(i, d[k]) for (i,k) in enumerate(sorted(d), 1))
1. apple
2. cat
3. dog

Не отсортировано (результаты будут получены, однако dict похоже на их выдачу)

>>> print '\n'.join('{}. {}'.format(i, v) for (i,v) in enumerate(d.itervalues(), 1))
1. apple
2. cat
3. dog
0 голосов
/ 23 февраля 2012

Простой итерационный кодовый словарь сделает это. См. Также форматирование строки, чтобы точно указать местоположение в соответствии с запросом.

d = {"a":"apple", "c":"cat", "d":"dog"}

count=1
for k,v in d.iteritems():
   print "%s. %s" % (count, k)
   count +=1
...