Search code examples
pythonlistlist-comprehension

Assign values for objects inside a list comprehension


Having a list and list of objects Eg:

new_price = [20.00, 30.00, 45.00...]
item_list = [obj1, obj2, obj3...]

Trying to do something like this

[x.price = y for x, y in zip(item_list, new_price)]

Now, the x & y is not detected as parameters. Thanks for the help


Solution

  • A list comprehension is a convenient way to create a list. It's not intended to be used in the way you are suggesing.

    See here: https://docs.python.org/3/glossary.html#term-list-comprehension

    A compact way to process all or part of the elements in a sequence and return a list with the results. result = ['{:#04x}'.format(x) for x in range(256) if x % 2 == 0] generates a list of strings containing even hex numbers (0x..) in the range from 0 to 255. The if clause is optional. If omitted, all elements in range(256) are processed.

    I would suggest you use a for loop. It's clean, simple, and quite frankly, more readable than a list comprehension would be anyway.

    In [1]: from dataclasses import dataclass
    
    In [2]: @dataclass
       ...: class Item:
       ...:     price: int
       ...:
    
    In [3]: new_price = [20.00, 30.00, 45.00]
    
    In [4]: a = Item(99)
    
    In [5]: b = Item(98)
    
    In [6]: c = Item(97)
    
    In [7]: item_list = [a, b, c]
    
    In [8]: for x, y in zip(item_list, new_price):
        ...:     x.price = y
        ...:
    
    In [9]: a
    Out[9]: Item(price=20.0)
    
    In [10]: b
    Out[10]: Item(price=30.0)
    
    In [11]: c
    Out[11]: Item(price=45.0)