пузырьковая сортировка в словаре в питоне - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь выполнить сортировку по пузырькам в порядке убывания

input={"m":1,"i":4,"s":4,"P":2}

output={"i":4,"s":4,"p":2,"m":1}

, но возникает ошибка типа.Как я могу это сделать?

Ниже приведен код:

dict={"m":1,"i":4,"s":4,"P":2}
for key,value in dict.items():
    if(dict[key]<dict[key+1]):
        temp=dict[key]
        dict[key]=dict[key+1]
        dict[key+1]=temp
print(dict)        

Ответы [ 2 ]

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

Вы имеете в виду что-то вроде этого?

dict={"m":1,"i":4,"s":4,"P":2}
sorted_values = sorted(dict.values(),reverse = True)
print sorted_values

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

values = dict.values()

, а затем сортируйте их;)

Как уже упоминалось в комментарии к timgeb, я 'Мне жаль, что я не видел комментарий до того, как написал это сообщение.

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

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

Таким образом, вы не можете "сортировать"" словарь.Однако то, что вы можете сделать, это, например, отсортировать список из двух кортежей , например:

my_list = list(my_dict.items())

Затем мы получим:

>>> my_list
[('m', 1), ('i', 4), ('s', 4), ('P', 2)]

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

for mx in range(len(my_list)-1, -1, -1):
    swapped = False
    for i in range(mx):
        if my_list[i][1] < my_list[i+1][1]:
            my_list[i], my_list[i+1] = my_list[i+1], my_list[i]
            swapped = True
    if not swapped:
        break

Затем мы получим:

>>> my_list
[('i', 4), ('s', 4), ('P', 2), ('m', 1)] 
...