Top.Mail.Ru
Ответы

Функция zip() в python

1234567891011121314
 product = ['Apple', 'Chips', 'Tea', 'food']
price = [150, 120, 500, 1000]

product_price = zip(product, price)

print(list(product_price))
print(dict(product_price))

# Вывод:

[('Apple', 150), ('Chips', 120), ('Tea', 500), ('food', 1000)]
{}

ПОЧЕМУ ВЫВОДИТСЯ ПУСТОЙ СЛОВАРЬ???? 
По дате
По рейтингу
Аватар пользователя
Новичок

Проблема твоего кода - в том, что функция zip возвращает итератор, а не коллекцию.

Поэтому конструкция list(product_price) потребляет весь итератор, и в нём ничего не остаётся для dict(product_price). Это называется, создатели Питона пытались копировать Хаскель, но не осилили, т.к. вместо нормальных дизайн решений везде срезали углы.

Если тебе нужен список, сохрани его в отдельной переменной и строй словарь из него:

1234567
 product = ['Apple', 'Chips', 'Tea', 'food']
price = [150, 120, 500, 1000]

product_price = list(zip(product, price))

print(product_price)
print(dict(product_price)) 


А если не нужен, тогда сразу делай dict от итератора.

Аватар пользователя
Профи

Пустой словарь выводится потому, что функция zip() создает итератор кортежей, а не словарь. Чтобы создать словарь, где ключами будут элементы из списка product, а значениями - элементы из списка price, можно использовать функцию dict(), которая принимает итератор кортежей в качестве аргумента.

product = ['Apple', 'Chips', 'Tea', 'food']
price = [150, 120, 500, 1000]

product_price_dict = dict(zip(product, price))

print(product_price_dict)
------
{'Apple': 150, 'Chips': 120, 'Tea': 500, 'food': 1000}