Как я могу сортировать этот словарь в алфавитном порядке?

Это словарь:

lettersandnumbers = {'Z': 1, 'Y': 0, 'X': 1, 'W': 17, 'V': 4, 'U': 0,\ 'T': 22, 'S': 21, 'R': 31, 'Q': 0, 'P': 12, 'O': 8,\ 'N': 10, 'M': 29, 'L': 27, 'K': 14, 'J': 51, 'I': 7,\ 'H': 14, 'G': 21, 'F': 12, 'E': 27, 'D': 40, 'C': 43,\ 'B': 28, 'A': 34} 

Я хочу, чтобы он сортировался по алфавиту. Я попытался сделать это в списке, чтобы использовать отсортированную функцию, но я полностью потерял. Есть идеи?

5 Solutions collect form web for “Как я могу сортировать этот словарь в алфавитном порядке?”

Словарь – это просто контейнер. Если вы хотите итерировать ключи в отсортированном порядке, см. Раздел «В Python», как мне перебирать словарь в отсортированном порядке?

Существует несколько способов сделать итерацию, ссылки выше описанных методов сортировки словаря для одноразового использования. Если вам нужен постоянный упорядоченный словарь, с Python 2.7 и 3.x, вы можете использовать коллекции OrderedDict , см. Пример ниже:

 >>> from collections import OrderedDict # Random dictionary >>> foo = {'a': 1, 'b':2, 'e':4, 'd':6, 'f': 7} >>> foo {'a': 1, 'b':2, 'e':4, 'd':6, 'f': 7} # OrderedDict remember order of insert, hence to maintain a sorted # dictionary entry, we must supplies a sorted tuple the example below # sorted by entry key >>> bar = OrderedDict(sorted(foo.items(), key=lambda t: t[0])) >>> bar OrderedDict([('a', 1), ('b', 2), ('d', 6), ('e', 4), ('f', 7)]) 

Несмотря на разницу в нотации, функция объекта штриха идентична словарю.

 >>> from collections import OrderedDict >>> from string import ascii_uppercase as alphabet >>> d = {'Z': 1, 'Y': 0, 'X': 1, 'W': 17, 'V': 4, 'U': 0, 'T': 22, 'S': 21, 'R': 31, 'Q': 0, 'P': 12, 'O': 8,'N': 10, 'M': 29, 'L': 27, 'K': 14, 'J': 51, 'I': 7, 'H': 14, 'G': 21, 'F': 12, 'E': 27, 'D': 40, 'C': 43, 'B': 28, 'A': 34} >>> OrderedDict((k, d[k]) for k in alphabet if k in d) OrderedDict([('A', 34), ('B', 28), ('C', 43), ('D', 40), ('E', 27), ('F', 12), ('G', 21), ('H', 14), ('I', 7), ('J', 51), ('K', 14), ('L', 27), ('M', 29), ('N', 10), ('O', 8), ('P', 12), ('Q', 0), ('R', 31), ('S', 21), ('T', 22), ('U', 0), ('V', 4), ('W', 17), ('X', 1), ('Y', 0), ('Z', 1)]) 

Поскольку @Nerolynx отказывается использовать эту более быструю и быструю версию своего метода

 >>> from collections import OrderedDict >>> d = {'Z': 1, 'Y': 0, 'X': 1, 'W': 17, 'V': 4, 'U': 0, 'T': 22, 'S': 21, 'R': 31, 'Q': 0, 'P': 12, 'O': 8,'N': 10, 'M': 29, 'L': 27, 'K': 14, 'J': 51, 'I': 7, 'H': 14, 'G': 21, 'F': 12, 'E': 27, 'D': 40, 'C': 43, 'B': 28, 'A': 34} >>> OrderedDict(sorted(d.items())) OrderedDict([('A', 34), ('B', 28), ('C', 43), ('D', 40), ('E', 27), ('F', 12), ('G', 21), ('H', 14), ('I', 7), ('J', 51), ('K', 14), ('L', 27), ('M', 29), ('N', 10), ('O', 8), ('P', 12), ('Q', 0), ('R', 31), ('S', 21), ('T', 22), ('U', 0), ('V', 4), ('W', 17), ('X', 1), ('Y', 0), ('Z', 1)]) 

Если вы используете [some dict].items() , он создает список кортежей:

 >>> d={3:'three',35:'thirty five',100:'one hindred'} >>> d {35: 'thirty five', 3: 'three', 100: 'one hindred'} >>> d.items() [(35, 'thirty five'), (3, 'three'), (100, 'one hindred')] 

Кортежи сортируются в Python:

 >>> sorted(d.items()) [(3, 'three'), (35, 'thirty five'), (100, 'one hindred')] 

Поэтому ваш словарь сортируется так же, как вы хотите, с порядком сортировки по умолчанию Python:

 >>> lettersandnumbers = {'Z': 1, 'Y': 0, 'X': 1, 'W': 17, 'V': 4, 'U': 0,'T': 22, 'S': 21, 'R': 31, 'Q': 0, 'P': 12, 'O': 8,'N': 10, 'M': 29, 'L': 27, 'K': 14, 'J': 51, 'I': 7,'H': 14, 'G': 21, 'F': 12, 'E': 27, 'D': 40, 'C': 43,'B': 28, 'A': 34} >>> sorted(lettersandnumbers.items()) [('A', 34), ('B', 28), ('C', 43), ('D', 40), ('E', 27), ('F', 12), ('G', 21), ('H', 14), ('I', 7), ('J', 51), ('K', 14), ('L', 27), ('M', 29), ('N', 10), ('O', 8), ('P', 12), ('Q', 0), ('R', 31), ('S', 21), ('T', 22), ('U', 0), ('V', 4), ('W', 17), ('X', 1), ('Y', 0), ('Z', 1)] 

(Возможно, вам придется использовать параметр сортировки, если желаемый порядок отличается от значения по умолчанию. В случае, по умолчанию работает.)

Затем, если вы хотите, чтобы диктофон соблюдал этот порядок:

 >>> from collections import OrderedDict >>> od=OrderedDict(sorted(lettersandnumbers.items())) >>> od.items()[0] ('A', 34) >>> od.items()[-1] ('Z', 1) 

Но упорядоченный dict основан на порядке вставки, поэтому он будет несортирован, если вы добавите что-либо, что не в порядке сортировки.

Лучше все же избегайте делать ненужную копию dict и просто итетерируйте на dict, как необходимо, в текущем порядке сортировки:

 for k,v in sorted(d.items()): # deal with the key and value in sorted order at that moment... 

С Python 2 вам нужно использовать d.iteritems () или вы создадите 2 списка тем: 1 для элементов и 1 для сортировки. С Py 3 (или с помощью метода Py 2 и d.iteritems ()) для сортировки создается только 1 список тем.

Python - лучший язык программирования в мире.