Как я могу отсортировать словарь по ключу? - PullRequest
778 голосов
/ 25 января 2012

Что было бы хорошим способом перейти от {2:3, 1:89, 4:5, 3:0} к {1:89, 2:3, 3:0, 4:5}?
Я проверил несколько сообщений, но все они используют оператор "сортировка", который возвращает кортежи.

Ответы [ 24 ]

11 голосов
/ 03 февраля 2014

Здесь я нашел простейшее решение для сортировки кода Python по ключу, используя pprint.например.

>>> x = {'a': 10, 'cd': 20, 'b': 30, 'az': 99} 
>>> print x
{'a': 10, 'b': 30, 'az': 99, 'cd': 20}

но при использовании pprint он вернет отсортированный dict

>>> import pprint 
>>> pprint.pprint(x)
{'a': 10, 'az': 99, 'b': 30, 'cd': 20}
7 голосов
/ 19 января 2017

Существует простой способ сортировки словаря.

По вашему вопросу,

Решение:

c={2:3, 1:89, 4:5, 3:0}
y=sorted(c.items())
print y

(где c, это имявашего словаря.)

Эта программа дает следующий вывод:

[(1, 89), (2, 3), (3, 0), (4, 5)]

, как вы хотели.

Другой пример:

d={"John":36,"Lucy":24,"Albert":32,"Peter":18,"Bill":41}
x=sorted(d.keys())
print x

Дает вывод: ['Albert', 'Bill', 'John', 'Lucy', 'Peter']

y=sorted(d.values())
print y

Дает вывод: [18, 24, 32, 36, 41]

z=sorted(d.items())
print z

Дает вывод:

[('Albert', 32), ('Bill', 41), ('John', 36), ('Lucy', 24), ('Peter', 18)]

Следовательно, изменив его наключи, значения и элементы, вы можете напечатать, как вы хотели. Надеюсь, это поможет!

6 голосов
/ 14 марта 2017

Я думаю, что проще всего отсортировать диктат по ключу и сохранить отсортированную пару ключ: значение в новом диктовке.

dict1 = {'renault': 3, 'ford':4, 'volvo': 1, 'toyota': 2} 
dict2 = {}                  # create an empty dict to store the sorted values
for key in sorted(dict1.keys()):
    if not key in dict2:    # Depending on the goal, this line may not be neccessary
        dict2[key] = dict1[key]

Чтобы было понятнее:

dict1 = {'renault': 3, 'ford':4, 'volvo': 1, 'toyota': 2} 
dict2 = {}                  # create an empty dict to store the sorted     values
for key in sorted(dict1.keys()):
    if not key in dict2:    # Depending on the goal, this line may not be  neccessary
        value = dict1[key]
        dict2[key] = value
6 голосов
/ 02 марта 2017

будет генерировать именно то, что вы хотите:

 D1 = {2:3, 1:89, 4:5, 3:0}

 sort_dic = {}

 for i in sorted(D1):
     sort_dic.update({i:D1[i]})
 print sort_dic


{1: 89, 2: 3, 3: 0, 4: 5}

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

from collections import OrderedDict
sorted_dict = OrderedDict(sorted(D1.items(), key=lambda t: t[0]))
5 голосов
/ 16 июня 2018

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

Это ваш словарь

d = {2:3, 1:89, 4:5, 3:0}

Создайте новый словарь d1, отсортировав этот d, используялямбда-функция

d1 = dict(sorted(d.items(), key = lambda x:x[0]))

d1 должна быть {1: 89, 2: 3, 3: 0, 4: 5}, отсортирована по ключам в d.

5 голосов
/ 28 марта 2014

Диконы Python неупорядочены. Обычно это не проблема, поскольку наиболее распространенный вариант использования - поиск.

Самый простой способ сделать то, что вы хотите, это создать collections.OrderedDict, вставляя элементы в отсортированном порядке.

ordered_dict = collections.OrderedDict([(k, d[k]) for k in sorted(d.keys())])

Если вам нужно выполнить итерацию, как предлагали другие, самый простой способ - выполнить итерацию по отсортированным ключам. * 1007 ПРИМЕРЫ *

Печать значений, отсортированных по ключам:

# create the dict
d = {k1:v1, k2:v2,...}
# iterate by keys in sorted order
for k in sorted(d.keys()):
    value = d[k]
    # do something with k, value like print
    print k, value

Получить список значений, отсортированных по ключам:

values = [d[k] for k in sorted(d.keys())]
3 голосов
/ 13 декабря 2018

Я придумаю сортировку в одной строке.

>> a = {2:3, 1:89, 4:5, 3:0}
>> c = {i:a[i] for i in sorted(a.keys())}
>> print(c)
{1: 89, 2: 3, 3: 0, 4: 5}
[Finished in 0.4s]

Надеюсь, это будет полезно.

2 голосов
/ 15 сентября 2016

Ребята, вы делаете вещи сложнее ... это действительно просто

from pprint import pprint
Dict={'B':1,'A':2,'C':3}
pprint(Dict)

Вывод:

{'A':2,'B':1,'C':3}
2 голосов
/ 26 января 2017

Самое простое решение состоит в том, что вы должны получить список ключей dict в порядке их сортировки, а затем выполнить итерацию по dict.Например,

a1 = {'a':1, 'b':13, 'd':4, 'c':2, 'e':30}
a1_sorted_keys = sorted(a1, key=a1.get, reverse=True)
for r in a1_sorted_keys:
    print r, a1[r]

Ниже будет вывод (в порядке убывания)

e 30
b 13
d 4
c 2
a 1
1 голос
/ 17 октября 2018

Или используйте pandas,

Демонстрация:

>>> d={'B':1,'A':2,'C':3}
>>> df=pd.DataFrame(d,index=[0]).sort_index(axis=1)
   A  B  C
0  2  1  3
>>> df.to_dict('int')[0]
{'A': 2, 'B': 1, 'C': 3}
>>> 

См .:

Документы этого

Документация целых панд

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...