如何获取字典列表中特定键的特定值?
我正在尝试编写代码来搜索字典列表, 并查看我的输入是否在键“ c”的值中。
例如d1={'a':'b','c':'d','e':'f'}
,d2,d3
等。
当我收到输入信息时,假设“'d”,我希望程序进行检查 键“ c”的值中是否有“ d”。
然后我要打印字典中以'd'作为键'c'值的键'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')
答案 0 :(得分:2)
给出包含有关商店信息的词典列表:
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)对于商店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