如何处理字典中列表中的特定值

时间:2019-04-28 04:04:55

标签: python list dictionary

如何获取字典列表中特定键的特定值?

我正在尝试编写代码来搜索字典列表, 并查看我的输入是否在键“ 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')

1 个答案:

答案 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