SyntaxError: неверный синтаксис при построении dict из списка с использованием Python 2.6

1

Я создал Python script с Python2.7, и он отлично работает. Однако, когда я запускаю тот же script с Python2.6, я получил ошибку "Синтаксис: недействительный синтаксис".

После исследования проблема, похоже, связана с циклом for.

l1 = [["a1", "a2"], ["b1", "b2"]]
print {item[0]:item[1] for item in l1}

Когда я запускаю вышеуказанный код с Python 2.7, у меня есть следующий вывод:

{'a1': 'a2', 'b1': 'b2'}

Когда я запускаю тот же код с Python 2.6, у меня есть следующая ошибка:

>>> l1 = [["a1", "a2"], ["b1", "b2"]]
>>> print {item[0]:item[1] for item in l1}
  File "<stdin>", line 1
    print {item[0]:item[1] for item in l1}
                             ^
SyntaxError: invalid syntax
>>>

Любая помощь приветствуется.

С уважением,
Аллен

Теги:

3 ответа

4
Лучший ответ

Попробуйте следующее:

print dict(item for item in l1)

Изменить комментарий: Если вы хотите явно выбрать элементы, оберните их в кортеж:

print dict((item[1], item[4]) for item in l1)
  • 0
    Спасибо Space_C0wb0y и ваш код работает. Однако в своем вопросе я упростил код. На самом деле в каждом подсписке более 1 элементов в l1. Я хотел бы сделать что-то вроде «print dict (item [1]: item [4] для item в l1)», и это все еще дает мне ошибку. Какие-либо предложения?
  • 0
    @ Аллен: я изменил свой ответ. Это должно работать.
Показать ещё 1 комментарий
3

Словарь в Python 2.6 недоступен. См. Space_C0wb0y ответ о том, как обойти это в коде.

  • 0
    Но почему они в 2.7? PEP был отозван, и я всегда думал, что это особенность Python 3.
  • 1
    Не уверен, почему, но они в конечном итоге были перенесены с 3.1 .
Показать ещё 1 комментарий
2

попробуйте следующее:

print dict([tuple(i) for i in l1])
  • 0
    Это кажется немного сложным. Нет необходимости сначала создавать список кортежей.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню