显示用户输入的dict键



所以我正在尝试做一些基于CLI/文本的购物程序,该程序为产品预定义了字典。(包括产品名称、数量、价格(

完成了一半,但在";搜索";选项

基本上,我有一个菜单,有5个选项。

  1. 搜索产品
  2. 转到购物篮
  3. 购买
  4. 注销
  5. 退出

如果用户选择1/搜索产品=>程序应要求用户提供搜索词,如水、果汁、苹果等。例如,如果用户提供水作为输入,程序应显示其中包含水的所有内容以及价格,并用数字列出。

假设我们有这个预定义的字典。

inventory = {"Rose water": [10,5], "Salty water": [5,10], "Apple": [3,10], "Sugary water": [1,5], "Cream": [5,6]}

dict=产品名称中的密钥

dict=中的值第一个值是数量,第二个值是价格

例如:

search = water
found = Found 3 similar products 
1. Rose water 5$
2. Salty water 10$
3. Sugary water 5$

我应该走哪条路?我试图只使用函数/def来实现这一点。我应该试着上课吗?因为我有点拘泥于搜索和添加产品到篮子里。

dictionary的一个限制是您不能"直接";在字典中查找部分关键字。你必须循环浏览它们才能找到答案。有其他方法可以做到这一点,你可以在学习过程中不断学习。

使用循环键搜索部分键

现在,您可以使用列表理解在字典中循环,并在每个键中搜索部分键。如果找到,您可以选择价格并进行展示。在显示之前,您需要确保数量大于零(0(。

以下是操作方法。

inventory = {"Rose water": [10,5],
"Salty water": [5,10],
"Apple": [3,10],
"Sugary water": [1,5],
"Cream": [5,6]}
search = 'water'
#search each key in the inventory for word containing partial key search
#if found, ensure there are enough quantity to purchase
#if both conditions are satisfied, store key and price into results
results = [[key,value[1]] for key, value in inventory.items() if search.lower() in key.lower() and value[0] > 0]
#if results list contains any values, then print the details
if results:
print ('Found', len(results), 'similar products')
#iterate thru the results list and print the product name and price
for i,(k,v) in enumerate(results):
print ('    {}. {} {}$n'.format(str(i+1),str(k),str(v)))
#if no values found in results, display product not found
else:
print ('No products found for', search)

这里,糖水有1个项目。您的搜索结果将是:

search = water
Found 3 similar products
1. Rose water 5$
2. Salty water 10$
3. Sugary water 5$

search=水,Sugary water=0可用量。

inventory = {"Rose water": [10,5],
"Salty water": [5,10],
"Apple": [3,10],
"Sugary water": [0,5],
"Cream": [5,6]}

输出为:

Found 2 similar products
1. Rose water 5$
2. Salty water 10$

如果搜索=牛奶,则在库存中找不到,因此您将收到不同的消息。

search=牛奶

输出为:

No products found for milk

使用pandas搜索选项

import pandas as pd
df = pd.DataFrame.from_dict(inventory,orient='index')
df.columns = ['Quantity', 'Price']
print (df)
#with filter option
print (df.filter(like='water', axis=0))
#with lambda function
print (df[df.index.map(lambda x: 'water' in x)])
#with search loop of df.index
print (df[['water' in s for s in df.index]])

其输出为:

您的完整数据帧将是:

Quantity  Price
Rose water          10      5
Salty water          5     10
Apple                3     10
Sugary water         0      5
Cream                5      6

您对water的搜索结果将是:

Quantity  Price
Rose water          10      5
Salty water          5     10
Sugary water         0      5

您可以按键循环浏览库存字典,并打印出其中包含搜索的项目。

search = "water"
inventory = {"Rose water": [10,5], "Salty water": [5,10], "Apple": [3,10], "Sugary water": [1,5], "Cream": [5,6]}
match = []
for key in inventory:
if search in key:
match.append([key, inventory[key][1]])
print("found = Found", len(match), "similar products")
for i in range(len(match)):
print(i+1, match[i][0], str(match[i][1])+'$')

使用循环,可以检查字典中值的键。如果搜索是in项目名称。然后我们使用循环以某种格式打印出项目。

您可以循环遍历字典,并使用in关键字检查输入值是否在产品名称中。

类似这样的代码:

theInput = "water"
inventory = {"Rose water": [10,5], "Salty water": [5,10], "Apple": [3,10], "Sugary water": [1,5], "Cream": [5,6]}
# Use something like below line
output = [[i, inventory[i]] for i in inventory if theInput.lower() in i.lower()]
print(output)

如何格式化输出:

print("found = Found %i similar products" %len(output))
for each in output:
print("%i. %s %i$n" %(output.index(each)+1, each[0], each[1][1]))

最新更新