Как да преобразувам синтаксиса на речника на 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