Pyrym
@Pyrym
Python 3 и PyQt5

Python 3 | Какая ошибка в функции создания словаря?

Хочу оптимизировать вот такой код:
# сбор данных для 1 строки
        db_tb_i = dict(Первый = self.pole_1.text(),
                       Второй = self.pole_2.text(),
                       Третий = self.pole_3.text(),
                       Четвёртый = self.pole_4.text())
        # конец: сбор данных

Очевидно, что это создание словаря из значений полей.
Дополнительная информация:
columnCount - глобальная переменная, число столбцов табл
columnName - глобальная переменная, список имён столбцов
columnName = ["Первый", "Второй", "Третий", "Четвёртый"]

self.polya - локальная переменная, атрибут текущего класса, это список из полей:
self.polya = [self.pole_1,self.pole_2,self.pole_3,self.pole_4]

Сначала я хотел сделать словарь таким образом:
for i in range(0,columnCount):
    db_tb_i = dict(zip(i in columnName, (i in self.polya).text()))

Не получилось. Тогда вот так:
lst_polya = list(map(text(), self.polya))
for i in range(0,columnCount):
    db_tb_i = dict(zip(i in columnName, i in lst_polya))

Shell пишет вот это: “NameError: name ‘text’ is not defined”
Т.е. методы не работают с map или надо надо написать по-другому?
Почему не работают оба варианта создания словаря?
  • Вопрос задан
  • 219 просмотров
Решения вопроса 2
JaxxDexx
@JaxxDexx
dictionary = dict(zip(columnName, [polya.text() for polya in self.polya]))
Ответ написан
Комментировать
@fireSparrow
Как правильно сделать, вам уже ответили, а я хочу прояснить одно из ваших затруднений:

list(map(text(), self.polya))

Этот код действительно не будет работать.
В глобальной области видимости у вас нет функции 'text', она существует только как метод внутри конкретных объектов. Обратиться в 'map' к методам итерируемых объектов можно через лямбда-функцию:

list(map(lambda o: o.text(), self.polya))

ЗЫ: Брать в качестве имён русские слова, написанные транслитом, - дурной стиль. Используйте английские слова.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы