как приблизиться к конкретному значению в списке в словаре - PullRequest
0 голосов
/ 28 апреля 2019

Как я могу получить конкретное значение определенного ключа в списке словарей?

Я пытаюсь написать код, который будет искать в списке словарей, и посмотреть, если мой ввод в значения для клавиши "C".

ех. d1={'a':'b','c':'d','e':'f'}, d2,d3 и т. Д.

когда я получу ввод, скажем, 'd', я хочу, чтобы программа проверила если есть 'd' в значениях для ключа 'c'.

Затем я хочу напечатать значение ключа «c» словаря, в котором «d» было значением ключа «c».

результат должен выглядеть следующим образом.

choice=input('choose the alphabet')
choose the alphabet: d
a

возможный ответ? это было предложено, было полезно, но я все еще не понял, как приблизиться к нескольким словарям в списке.

dict_A={'name':'A','goods':'clothing','price':200}
dict_B={'name':'B','goods':'interior','price':180}
dict_C={'name':'C','goods':'clothing','price':50}

shops_all=[dict_A,dict_B,dict_C]

choice=input('what kind of stuff are you looking for ')
price=int(input('your budget? '))

for item in shops_all:
    if choice == item['goods']:
        if price <= item['price']:
            print('shop {},price{}dollars'.format(item['shop'],item['price']))
        else:
            print('no such shop')

1 Ответ

2 голосов
/ 28 апреля 2019

Имеется список словарей, которые содержат информацию о магазинах:

shops = [
    {"name": "Barneys New York", "state": "NY"},
    {"name": "Bealls", "state": "CO"},
    {"name": "Belk.", "state": "PA"},
    {"name": "Boscov's.", "state": "AL"},
    {"name": "Dillard's.", "state": "OH"},
    {"name": "Hudson's Bay Company", "state": "NY"},
    {"name": "Lord & Taylor", "state": "CA"},
    {"name": "Saks Fifth Avenue", "state": "NY"},
    {"name": "J. C. Penney.", "state": "MD"},
    {"name": "Kohl's.", "state": "VA"},
]

Если вы хотите перебирать список, вам не нужен счетчик итераторов.Вызов переменной, которую вы хотите перебрать, даст вам каждый элемент по одному.

for shop in shops:

Следующие строки позволят выполнить то же самое, но это намного сложнее для чтения и вводит много ненужных операций.Магазины уже прошли бы итерацию для генерации len(), затем вы создаете еще один итератор range().Наконец, вы индексируете что-то, что можно было легко передать вам.Так что да, используйте более простой способ зацикливания.

for i in range(len(shops)):
    shop = shops[i]

Теперь, если вы хотите узнать, находится ли этот магазин в заданном состоянии, вы можете проверить, находится ли он в одном из ключей словаря, используяif <state> in shop.values() или, если вы знаете, что ищете пару ключ / значение состояния, вы можете напрямую оценить ключ словаря с помощью shop['state'].Если это соответствует желаемому состоянию, просто распечатайте то, что вам нужно.

for shop in shops:
    if shop['state'] == 'CA':
        print(shop['name'])

# Lord & Taylor

На этом этапе вы можете получить доступ к любой части словаря магазина и выполнить любую действительную логику.

С вашим кодом вам лучше сразу поместить все в список.Если вы получаете информацию определенным образом, то вам придется иметь дело с ней, но если вы жестко запрограммировали ее в свой файл, как этот, тогда продолжайте и включите это:

dict_A = {'name':'A', 'goods':'clothing', 'price':200}
dict_B = {'name':'B', 'goods':'interior', 'price':180}
dict_C = {'name':'C', 'goods':'clothing', 'price':50}

shops_all = [dict_A, dict_B, dict_C]

в это

shops_all = [
    {'name':'A', 'goods':'clothing', 'price':200},
    {'name':'B', 'goods':'interior', 'price':180},
    {'name':'C', 'goods':'clothing', 'price':50},
]

Теперь, допустим, вы хотите найти одежду, и у вас есть только 100 долларов.

choice = 'clothing'
price = 100

Теперь я предполагаю, что вы предполагали, что бюджет будет максимальным, который вы хотелипотратить, поэтому у вас есть логическая ошибка в вашей строке if price <= item['price'].Здесь вы смотрите, где цена магазина выше, чем вы хотите.Итак, давайте перевернем это на item['price'] <= price.У вас также была небольшая ошибка, когда вы указали item['shop'], когда вы имели в виду item['name'] на основе ваших данных выборки.Как только они будут исправлены, вы можете дать ему шанс.

for item in shops_all:
    if choice == item['goods']:
        if item['price'] <= price:
            print('shop {}, price {} dollars'.format(item['name'], item['price']))
        else:
            print('no such shop')
# no such shop
# shop C, price 50 dollars

Теперь вы видите сообщение «Нет такого магазина», что явно не так.Здесь есть две проблемы с кодом.1) else должен быть смещен до первого оператора if и 2) он все равно будет pritnt для магазина B. Итак, здесь может пригодиться переменная флага success.Вы можете установить переменную в false и перевернуть ее в true, если у вас есть совпадение.Затем проверьте после завершения итерации, хотите ли вы напечатать сообщение, сообщающее им, что им не повезло.Кроме того, было бы хорошо проверить выбор и цену одновременно, используя and.

success = False
for item in shops_all:
    if choice == item['goods'] and item['price'] <= price:
        success = True
        print('shop {}, price {} dollars'.format(item['name'], item['price']))

if not success:
    print('no such shop')

# shop C, price 50 dollars
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...