Вывести значение первого словаря с помощью второго словаря

CappyPot

Новичок
Пользователь
Сен 24, 2020
5
0
1
Есть 2 словаря: первый словарь - имя продавца-модель телефона, второй словарь- модель телефона-его цена.
Нужно вывести имя продавца той модели телефона, цена которой меньше 350
Первый словарь:
Python:
sells={
  "Маша":"Samsung 20",
  "Максим":"Iphone 6S",
  "Наташа":"Lenovo Legion"
}

Второй словарь:
Python:
prices={
  "Samsung 20": 300,
  "Iphone 6S": 260,
  "Lenovo Legion": 450
}

Я пробывал решить это через функцию, но выводит ошибку.
Сама функция:
Python:
def my_function():
low_price = [price for price, sell in sells.items() for price_in_price, cost in price.items() if cost < 350]
print(low_price)
Выводит вот такую ошибку:

---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-16-7bebf01be998> in <module>
----> 1 my_function()

<ipython-input-15-4320c44f8717> in my_function()
1 def my_function():
----> 2 low_price = [price for price, sell in sells.items() for price_in_price, cost in price.items() if cost < 350]
3 print(low_price)

NameError: name 'sells' is not defined

Буду рад, если поможете решить эту проблему
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
А как можно результат отсортировать по убыванию цены?
Вот пример:
Python:
sells = {
  "Николай": "Nokia 3310",
  "Маша": "Samsung 20",
  "Максим": "Iphone 6S",
  "Наташа": "Lenovo Legion"
}
prices = {
  "Nokia 3310": 5,
  "Samsung 20": 300,
  "Iphone 6S": 260,
  "Lenovo Legion": 450
}
sorted_prices = {k: v for k, v in sorted(prices.items(),
    key=lambda item: item[1], reverse=True) if v < 350}

info = []
for k, v in sorted_prices.items():
    for k2, v2 in sells.items():
        if k == v2:
            info.append(k2)

print(info)  # ['Маша', 'Максим', 'Николай']
 
Последнее редактирование:
  • Мне нравится
Реакции: CappyPot

root

Пользователь
Пользователь
Апр 29, 2020
60
14
8
Москва
Есть 2 словаря: первый словарь - имя продавца-модель телефона, второй словарь- модель телефона-его цена.
Нужно вывести имя продавца той модели телефона, цена которой меньше 350
Первый словарь:
Python:
sells={
  "Маша":"Samsung 20",
  "Максим":"Iphone 6S",
  "Наташа":"Lenovo Legion"
}

Второй словарь:
Python:
prices={
  "Samsung 20": 300,
  "Iphone 6S": 260,
  "Lenovo Legion": 450
}

Я пробывал решить это через функцию, но выводит ошибку.
Сама функция:
Python:
def my_function():
low_price = [price for price, sell in sells.items() for price_in_price, cost in price.items() if cost < 350]
print(low_price)
Выводит вот такую ошибку:

---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-16-7bebf01be998> in <module>
----> 1 my_function()

<ipython-input-15-4320c44f8717> in my_function()
1 def my_function():
----> 2 low_price = [price for price, sell in sells.items() for price_in_price, cost in price.items() if cost < 350]
3 print(low_price)

NameError: name 'sells' is not defined

Буду рад, если поможете решить эту проблему
Вместо такой длинной строки просто пройдись циклом по словарю, найди наименьшее и по ключу получи значение из второго словаря(с продавцами).
 

CappyPot

Новичок
Пользователь
Сен 24, 2020
5
0
1
Вместо такой длинной строки просто пройдись циклом по словарю, найди наименьшее и по ключу получи значение из второго словаря(с продавцами).
То есть мне надо создать цикл для второго словаря, что будет выдавать те значения которые меньше 350?
 

CappyPot

Новичок
Пользователь
Сен 24, 2020
5
0
1
Вместо такой длинной строки просто пройдись циклом по словарю, найди наименьшее и по ключу получи значение из второго словаря(с продавцами).
Я попробывал, но выводит ошибку...

Python:
for i in prices:
    if i < 350:
    print(i, "Цена меньше")
Ошибка:

File "<ipython-input-20-dde9298fa67c>", line 3
print(i, "Цена меньше")
^
IndentationError: expected an indented block


Извените, за такой цикл, я только новичок в Python...
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Есть 2 словаря: первый словарь - имя продавца-модель телефона, второй словарь- модель телефона-его цена.
Нужно вывести имя продавца той модели телефона, цена которой меньше 350
Вот пример:
Python:
sells = {
  "Маша": "Samsung 20",
  "Максим": "Iphone 6S",
  "Наташа": "Lenovo Legion"
}
prices = {
  "Samsung 20": 300,
  "Iphone 6S": 260,
  "Lenovo Legion": 450
}

models = [k for k, v in prices.items() if v < 350]
info = [k for k, v in sells.items() if v in models]
print(info)  # ['Маша', 'Максим']
 
  • Мне нравится
Реакции: CappyPot

CappyPot

Новичок
Пользователь
Сен 24, 2020
5
0
1
Вот пример:
Python:
sells = {
  "Маша": "Samsung 20",
  "Максим": "Iphone 6S",
  "Наташа": "Lenovo Legion"
}
prices = {
  "Samsung 20": 300,
  "Iphone 6S": 260,
  "Lenovo Legion": 450
}

models = [k for k, v in prices.items() if v < 350]
info = [k for k, v in sells.items() if v in models]
print(info)  # ['Маша', 'Максим']
А как можно результат отсортировать по убыванию цены?
 

CappyPot

Новичок
Пользователь
Сен 24, 2020
5
0
1
Вот пример:
Python:
sells = {
  "Николай": "Nokia 3310",
  "Маша": "Samsung 20",
  "Максим": "Iphone 6S",
  "Наташа": "Lenovo Legion"
}
prices = {
  "Nokia 3310": 5,
  "Samsung 20": 300,
  "Iphone 6S": 260,
  "Lenovo Legion": 450
}
sorted_prices = {k: v for k, v in sorted(prices.items(),
    key=lambda item: item[1], reverse=True) if v < 350}

info = []
for k, v in sorted_prices.items():
    for k2, v2 in sells.items():
        if k == v2:
            info.append(k2)

print(info)  # ['Маша', 'Максим', 'Николай']
О, то что подходит. Спасибо, модератор!
 

Форум IT Специалистов