Как проверить, существует ли индекс в списке, и использовать значение по умолчанию, если его нет? - PullRequest
0 голосов
/ 13 февраля 2020

Я объявил следующий словарь в моем скрипте Python:

    my_dictionary = {'course': row[0],
                'vars': [
                         {'name': 'FIRST_NAME', 'content': row[1]},
                         {'name': 'COURSE_NAME', 'content': row[2]},
                         {'name': 'HOLE_COUNT', 'content': row[3]},
                         {'name': 'SHORTNAME', 'content': row[4]},
                         {'name': 'SSS', 'content': (5 in row: row[5])},
                         {'name': 'COURSE_RECORD', 'content': (6 in row: row[6])},
                        ]
               }

Я борюсь с синтаксисом, в котором я пытаюсь проверить, существует элемент списка или нет:

                         {'name': 'SSS', 'content': (5 in row: row[5])},
                         {'name': 'COURSE_RECORD', 'content': (6 in row: row[6])},

Можно ли выполнить эту проверку на этом этапе?

Мой синтаксис неверен, потому что я получаю следующую ошибку: SyntaxError: invalid syntax

Ответы [ 3 ]

1 голос
/ 13 февраля 2020

Попробуйте это:

my_dictionary = {'course': row[0],
                'vars': [
                         {'name': 'FIRST_NAME', 'content': row[1]},
                         {'name': 'COURSE_NAME', 'content': row[2]},
                         {'name': 'HOLE_COUNT', 'content': row[3]},
                         {'name': 'SHORTNAME', 'content': row[4]},
                         {'name': 'SSS', 'content': (row[5] if len(row)>5 else "")},
                         {'name': 'COURSE_RECORD', 'content': (row[6] if len(row)>6 else "")},
                        ]
               }
0 голосов
/ 13 февраля 2020

это было бы проще в python 3 (вы должны помнить, python2 достиг eol)

Это работает на моем конце

my_dict={'test': ((row[5],'')[len(row)>5])}
0 голосов
/ 13 февраля 2020

Вот как вы видите, есть ли пятый элемент в списке. Это с интерактивной консоли (python).

Начиная со списка, я вижу, сколько у него элементов:

>>> my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> len(my_list)
7

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

>>> my_list[0]    # Looks good
'a'
>>> my_list[8]    # oh no, the eight item doesn't exist
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Так что самым простым подходом всегда может быть попытка получить элемент по его индексу, а затем перехват эта ошибка. Но это не очень эффективно. Более простой подход, если у вас есть значение по умолчанию, будет таким:

>>> my_list[6] if len(my_list) > 6 else 'my_default'
'g'
>>> my_list[7] if len(my_list) > 7 else 'my_default'
'my_default'
>>> 
...