Я учусь работать с диктовками, и у меня есть такая структура:

DATA = {
    'ATL': {
        '2019': {
            'status': 'inactive',
            'abbr': 'ATL',
            'city': 'Atlanta'},
        '2016': {
            'status': 'active',
            'abbr': 'ATL',
            'city': 'Atlanta'},
        '2018': {
            'status': 'inactive',
            'abbr': 'ATL',
            'city': 'Atlanta'},
        '2017': {
            'status': 'active',
            'abbr': 'ATL',
            'city': 'Atlanta'}
        }
    }

Вот одна попытка сортировки по годам:

sorted_keys = sorted(DATA['ATL'].keys())

Каждый раз, когда я получаю TypeError: '<' not supported between instances of 'int' and 'str'. Когда я печатаю ключи, он возвращает только те годы, которые, как я предполагаю, рассматриваются как «int», верно? Поскольку я довольно новичок в использовании диктов, я хорошо знаю, что могут быть проблемы со структурой диктов, но я довольно сильно застрял. Любая помощь с этим будет принята с благодарностью.

1
Nick 2 Июл 2019 в 20:47

3 ответа

Вы должны преобразовать ключи в целые числа:

sorted_keys = sorted([int(i) for i in DATA['ATL'].keys()])
0
Dull Bananas 2 Июл 2019 в 17:56

Я последовал вашему примеру и после использования словаря

DATA = {'ATL': {'2016': {'abbr': 'ATL', 'city': 'Atlanta', 'status': 'active'},
  '2017': {'abbr': 'ATL', 'city': 'Atlanta', 'status': 'active'},
  '2018': {'abbr': 'ATL', 'city': 'Atlanta', 'status': 'inactive'},
  '2019': {'abbr': 'ATL', 'city': 'Atlanta', 'status': 'inactive'}}}

И сортировка

sorted_keys = sorted(DATA['ATL'].keys())

Вывод sorted_keys:

['2016', '2017', '2018', '2019']

Который, кажется, то, что вы хотите. Проблема в том, что вы должны заметить, что годы - это строки, а не целые числа. Поэтому, если вы хотите иметь список лет в целочисленном формате, вы можете сделать следующее

nums = [int(year) for year in sorted_keys]

Это даст вам список лет в целочисленной форме, который не вызовет исключение TypeError.

0
Adam_Karlstedt 2 Июл 2019 в 17:56

Ваш код кажется правильным. Я попробовал следующее.

Использовал это как ввод.

DATA = {
'ATL': {
    '2019': {
        'status': 'inactive',
        'abbr': 'ATL',
        'city': 'Atlanta'},
    '2016': {
        'status': 'active',
        'abbr': 'ATL',
        'city': 'Atlanta'},
    '2018': {
        'status': 'inactive',
        'abbr': 'ATL',
        'city': 'Atlanta'},
    '2017': {
        'status': 'active',
        'abbr': 'ATL',
        'city': 'Atlanta'}
    }
}

Выполнен твой код.

sorted_keys = sorted(DATA['ATL'].keys())
sorted_keys

Я получил следующий вывод

['2016', '2017', '2018', '2019']

Может быть, у вас есть другая строка кода, выдающая ошибку?

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

0
Sai 2 Июл 2019 в 18:16