Как преобразовать синтаксис словаря Python с 2.7 на 2.6?

Я пытаюсь запустить свой скрипт из Jenkins, на котором установлен Python 2.6. Мой скрипт изначально был написан на машине с Linux, которая использует 2.7.5. Всякий раз, когда я запускаю скрипт с моей локальной машины, он работает нормально, но когда я пытаюсь запустить его из Jenkins, он выдает синтаксическую ошибку для следующего кода:

rpmDict = {rpmList[i]: rpmList_full[i] for i in range (len(rpmList))}

rpmDataDict = {rpmDataTextList[i]: rpmDataTextList_full[i] for i in range (len(rpmDataTextList))}

Может ли кто-нибудь помочь мне перевести это на синтаксис 2.6?


person MomentoMori4    schedule 23.09.2020    source источник


Ответы (2)


Таким образом, в обе версии это полностью переработано.

rpmDict = {rpmList[i]: rpmList_full[i] for i in range (len(rpmList))}

Должно быть просто:

rpmDict = dict(zip(rpmList, rpmList_full))

И:

rpmDataDict = {rpmDataTextList[i]: rpmDataTextList_full[i] for i in range (len(rpmDataTextList))}

Должно быть просто:

rpmDataDict = dict(zip(rpmDataTextList, rpmDataTextList_full))

Но, как отметил другой ответ, в Python2.6,

{expression0: expression1 for whatever in some_iterable}

Может быть преобразован в

dict((expression0, expression1) for whatever in some_iterable)

Также обратите внимание, что вам действительно следует как можно больше использовать Python 3. В любом случае в Python 2 используйте:

from future_builtins import zip

Так что zip создает итератор, а не список, что более эффективно, особенно для больших данных.

person juanpa.arrivillaga    schedule 23.09.2020
comment
Собирался опубликовать тот же базовый ответ (только с промежуточным шагом zip+genexpr), вместо этого проголосовал за ваш. Просто хотел отметить, что from future_builtins import zip позволяет избежать создания бессмысленного временного list из zip на Python 2. - person ShadowRanger; 23.09.2020

Просто используйте конструктор dict и передайте ему выражение генератора кортежей:

rpmDict = dict((rpmList[i], rpmList_full[i]) for i in range(len(rpmlist)))
person tzaman    schedule 23.09.2020