Невозможно преобразовать словарь в список кортежей и отсортировать его - PullRequest
0 голосов
/ 08 мая 2020

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

for key, value in data_dict.iteritems():
    sorted_dict_list = []
    sorted_dict_list.append((key, value["salary"], value["bonus"]))
    sorted_dict_list.sort(key=lambda tup: tup[1])
    for tuple in sorted_dict_list:
        print tuple

Проблема в том, что распечатка не отсортирована. В чем может быть проблема?

1 Ответ

1 голос
/ 08 мая 2020

Вы должны объявить sorted_dict_list за пределами первого for l oop, иначе каждый раз, когда вы go через l oop получаете новый пустой список. Вдобавок ко всему, ваши l oop - sorted_dict_list находятся внутри первого for l oop.

Таким образом, каждый раз, когда вы l oop через внешний l oop, вы создаете пустой список, добавьте в него следующую пару «ключ-значение», просмотрите список (который состоит только из одного элемента) и распечатайте значения. По сути, вы просто распечатываете каждую пару "ключ-значение" как go через.

Вам нужно переместить объявление списка за пределы l oop и убрать отступ второго l oop.

sorted_dict_list = []
for key, value in data_dict.iteritems():
    sorted_dict_list.append((key, value["salary"], value["bonus"]))
    sorted_dict_list.sort(key=lambda tup: tup[1])

for tuple in sorted_dict_list:
    print tuple

Это может быть лучшим решением:

def sortKey(item):
    return item[1]

sorted_dict = [(key, value['salary'], value['bonus']) for key, value in data_dict.items()]
sorted_dict = sorted(sorted_dict, key=sortKey)

for item in sorted_dict:
    print(item)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...