我在将真正多余的字典转换为函数(def)时遇到麻烦
可以正常工作的原始代码是:
Pen = (9,'always','monday')
Paper = (1,'always','tues')
PriceDic = {'Pen': Pen[0],
'Paper': Paper[0]}
while True:
name = input("name of the product?")
print(PriceDic.get(name),'dollar')
break
打印为...
>>>name of the product?Pen
>>>9 dollar
但是问题是
如此
我想也许我可以运行并编写这段代码...
def FindPriceFunction(x):
Pen = (9,'always','monday')
Paper = (1,'always','tuesday')
FindPriceDic = { x : x[0]}
print(FindPriceDic.get(x),'dollar')
while True:
name = input("name of the product?")
FindPriceFunction(name)
break
这给了我...
>>>name of the product?Pen
>>>P dollar
请帮助我
答案 0 :(得分:0)
您正在尝试使用字符串x来访问变量名,该变量名将无法按您期望的方式工作,例如,x的值为'Pen'。这不一定是推荐的方法,但是可以使用locals
函数来动态获取变量的值,如下所示:
def FindPriceFunction(x):
Pen = (9,'always','monday')
Paper = (1,'always','tuesday')
print(locals()[x][0],'dollar')
while True:
name = input("name of the product?")
FindPriceFunction(name)
break
此处,locals返回本地定义的变量的字典,您可以使用字符串x作为键来访问变量的值。因此locals()['Pen']
将为您提供值(9,'always','monday')
但是,将元组直接存储在字典中的某个位置,或者如果您不希望在其中存储较长的单词,则最好将其存储在读取的文件中会更好(更安全)您的代码,然后像您最初尝试的那样从那里访问数据,除了可以存储整个元组而不是仅存储价格,然后访问价格的元组的第一个元素。 locals
返回一个以变量名作为键,以变量值作为值的字典,因此它实际上完成了将值存储在dict中的操作。
例如,如果您要将其全部存储在JSON文件中,由于将有数百个字典,则可以执行以下操作:
JSON文件:
{
"Pen": [9, "always", "monday"],
"Paper": [1, "always", "tuesday"]
}
代码:
import json
with open('prices.json', 'r') as f:
prices = json.load(f)
def FindPriceFunction(x):
print(prices[x][0], 'dollar')
答案 1 :(得分:0)
您给的:
FindPriceDic = { x : x[0]}
print(FindPriceDic.get(x),'dollar')
并用x as Pen
调用该函数,它将打印x[0] = 'Pen'[0] = 'P'
。这给您带来了问题。所以尝试:
def FindPriceFunction(x):
FindPriceDic = {}
FindPriceDic['Pen'] = (9,'always','monday')
FindPriceDic['Paper'] = (1,'always','tuesday')
print(FindPriceDic.get(x)[0],'dollar')
while True:
name = input("name of the product?")
FindPriceFunction(name)
break
答案 2 :(得分:0)
您可以从一开始就将数据写成字典(字典中的值可以是任何类型,元组都可以):
my_data = {
'Pen': (9, 'always', 'monday'),
'Paper': (1, 'always', 'tuesday')
}
def FindPriceFunction(x):
print(my_data.get(x)[0],'dollar')
while True:
name = input("name of the product?")
FindPriceFunction(name)
break
答案 3 :(得分:0)
如果您需要更加灵活地使用数据结构,还可以依赖语义键,而不是使用元组的索引。
Pen:
price: 9
frequency: Always
day: Monday
Paper:
price: 1
frequency: Rarely
day: Tuesday
Scissors:
frequency: Often
import yaml # pyyaml package
with open("products.yaml", 'r') as stream:
try:
products = yaml.safe_load(stream)
except yaml.YAMLError as exc:
print(exc)
print(products)
print(products['Pen']['price'])
def find_price(product_name):
try:
return products[product_name]['price']
except KeyError:
return "N/A"
print(find_price('Pen'))
print(find_price('Scissors'))