@ekzotika

Как можно провести сравнение в цикле?

Есть такой код. Нужно провести сравнение, чтобы все строки были равны соответствующим. Можно сделать это как-то красивее, в цикле или что-то типа того? Заранее спасибо за помощь.

qs_cart = ECart.objects.filter(user_id=obj.user_id)
                qs_delivery = EOrderDelivery.objects.filter(order_id__in=qs_cart.values('order_id'))
                for idx, obj in enumerate(qs_delivery):
                    if idx == 0:
                        fields = ['city', 'country', 'flat', 'house', 'region', 'street', 'postal_code']
                        obj_ok = obj
                        id_ok = qs_cart[0].order_id
                    else:
                        if (getattr(obj, fields[0]) == getattr(obj_ok, fields[0])) and (
                                getattr(obj, fields[1]) == getattr(obj_ok, fields[1])) and (
                                getattr(obj, fields[2]) == getattr(obj_ok, fields[2])) and (
                                getattr(obj, fields[3]) == getattr(obj_ok, fields[3])) and (
                                getattr(obj, fields[4]) == getattr(obj_ok, fields[4])) and (
                                getattr(obj, fields[5]) == getattr(obj_ok, fields[5])) and (
                                getattr(obj, fields[6]) == getattr(obj_ok, fields[6])):
                            qs_cart.update(order_id=id_ok)
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Эту всю простыню:
(getattr(obj, fields[0]) == getattr(obj_ok, fields[0])) and (
getattr(obj, fields[1]) == getattr(obj_ok, fields[1])) and (
getattr(obj, fields[2]) == getattr(obj_ok, fields[2])) and (
getattr(obj, fields[3]) == getattr(obj_ok, fields[3])) and (
getattr(obj, fields[4]) == getattr(obj_ok, fields[4])) and (
getattr(obj, fields[5]) == getattr(obj_ok, fields[5])) and (
getattr(obj, fields[6]) == getattr(obj_ok, fields[6])):


Можно на это заменить:
all(getattr(obj, x) == getattr(obj_ok, x) for x in fields)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@deliro
Агрессивное программирование
Передавай кортеж полей на сравнение https://docs.python.org/3/library/operator.html#op...
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы