Python 遍历列表中的键时出错
大家好,我写了一个类似这样的函数Python 遍历列表中的键时出错,python,dictionary,keyerror,Python,Dictionary,Keyerror,大家好,我写了一个类似这样的函数 def solve_one_shop(shop, items): if len(items) == 0: return [0.0, []] all_possible = [] first_item = items[0] print shop['burger'] for (price,combo) in shop[first_item]: # DO SOMETHING # s
def solve_one_shop(shop, items):
if len(items) == 0:
return [0.0, []]
all_possible = []
first_item = items[0]
print shop['burger']
for (price,combo) in shop[first_item]:
# DO SOMETHING
#
solver(shop_text,['burger'])
我尝试迭代的字典是:
{'1': {'burger': [[4.0, ['burger']]], 'tofu_log': [[8.0, ['tofu_log']]]}, '3': {'chef_salad': [[4.0, ['chef_salad']]], 'steak_salad_sandwich': [[8.0, ['steak_salad_sandwich']]]}, '2': {'burger': [[5.0, ['burger']]], 'tofu_log': [[6.5, ['tofu_log']]]}, '5': {'extreme_fajita': [[4.0, ['extreme_fajita']]], 'fancy_european_water': [[8.0, ['fancy_european_water']]]}, '4': {'wine_spritzer': [[2.5, ['wine_spritzer']]], 'steak_salad_sandwich': [[5.0, ['steak_salad_sandwich']]]}, '6': {'extra_salsa': [[6.0, ['extreme_fajita', 'jalapeno_poppers', 'extra_salsa']]], 'jalapeno_poppers': [[6.0, ['extreme_fajita', 'jalapeno_poppers', 'extra_salsa']]], 'extreme_fajita': [[6.0, ['extreme_fajita', 'jalapeno_poppers', 'extra_salsa']]], 'fancy_european_water': [[5.0, ['fancy_european_water']]]}}
问题是第6行给出了keyrerror(shop[第一项])
[[4.0,['burger']]
回溯(最近一次呼叫最后一次):
文件“working.py”,第58行,在
解算器(shop_text,['burger'])
文件“working.py”,第44行,在解算器中
(价格、解决方案)=解决一个店铺(店铺信息、所需物品)
文件“working.py”,第29行,在solve_one_shop中
对于商店中的(价格、组合)。获取(第一项):
TypeError:“非类型”对象不可编辑
为了克服这个错误,我尝试了硬编码,例如,如果我将第一个项目硬编码为shop['burger']
(以及单引号),那么代码就会运行
但是如果我把它写成shop[burger]
,那么它会抛出同样的keyrerror:“burger”
如您所见,print shop['burger']
输出密钥的可用性'burger'
,但为什么会出现密钥错误
如何解决此问题?您正试图从
目录
(此处商店
)访问一个不存在的密钥。因此出现了错误。检查您的dict
中是否存在该键第一项
。您将不会得到此错误(更新的答案)
或者使用try:except:
...
try:
for (price,combo) in shop[first_item]:
except KeyError:
print 'ERROR: key not found!'
...
您正试图从
dict
(此处shop
)访问一个不存在的密钥。因此出现了错误。检查您的dict
中是否存在该键第一项
。您将不会得到此错误(更新的答案)
或者使用try:except:
...
try:
for (price,combo) in shop[first_item]:
except KeyError:
print 'ERROR: key not found!'
...
您正试图从
dict
(此处shop
)访问一个不存在的密钥。因此出现了错误。检查您的dict
中是否存在该键第一项
。您将不会得到此错误(更新的答案)
或者使用try:except:
...
try:
for (price,combo) in shop[first_item]:
except KeyError:
print 'ERROR: key not found!'
...
您正试图从
dict
(此处shop
)访问一个不存在的密钥。因此出现了错误。检查您的dict
中是否存在该键第一项
。您将不会得到此错误(更新的答案)
或者使用try:except:
...
try:
for (price,combo) in shop[first_item]:
except KeyError:
print 'ERROR: key not found!'
...
如果您想以更安全的方式访问python中的字典键,我建议使用
get
方法。例如:
shop.get(first_item, False)
其中,第二个参数是字典不包含您试图访问的项时的默认返回值
正如Jon指出的,你也可以这样做:
shop.get(first_item, [])
如果您的字典不包含该键,则迭代将停止。如果您希望以更安全的方式在python中访问字典键,我建议使用
get
方法。例如:
shop.get(first_item, False)
其中,第二个参数是字典不包含您试图访问的项时的默认返回值
正如Jon指出的,你也可以这样做:
shop.get(first_item, [])
如果您的字典不包含该键,则迭代将停止。如果您希望以更安全的方式在python中访问字典键,我建议使用
get
方法。例如:
shop.get(first_item, False)
其中,第二个参数是字典不包含您试图访问的项时的默认返回值
正如Jon指出的,你也可以这样做:
shop.get(first_item, [])
如果您的字典不包含该键,则迭代将停止。如果您希望以更安全的方式在python中访问字典键,我建议使用
get
方法。例如:
shop.get(first_item, False)
其中,第二个参数是字典不包含您试图访问的项时的默认返回值
正如Jon指出的,你也可以这样做:
shop.get(first_item, [])
如果你的字典不包含该键,迭代将停止。是的,如果你使用
[]
作为默认值(而不是False
),那么for
循环将按原样工作,或者实际上是一个不可操作的循环…@JonClements谢谢你的提及,补充道。斯莱特编辑了这篇文章来澄清我的要求。请帮我一下。再次感谢。@sunita您正在调用solver
,但您的函数名为solve\u one\u shop
-确保您的代码在您的问题中是正确的,因为它会混淆您实际试图运行的内容和实际运行的内容……是的,如果您使用[]
作为默认值(而不是False
)然后的循环将按原样工作,或者实际上是一个不可操作的循环…@JonClements谢谢你的提及,补充道。斯莱特我编辑了这篇文章来澄清我的要求。请帮我一下。再次感谢。@sunita您正在调用solver
,但您的函数名为solve\u one\u shop
-确保您的代码在您的问题中是正确的,因为它会混淆您实际试图运行的内容和实际运行的内容……是的,如果您使用[]
作为默认值(而不是False
)然后
的循环将按原样工作,或者实际上是一个不可操作的循环…@JonClements谢谢你的提及,补充道。斯莱特我编辑了这篇文章来澄清我的要求。请帮我一下。再次感谢。@sunita您正在调用solver
,但您的函数名为solve\u one\u shop
-确保您的代码在您的问题中是正确的,因为它会混淆您实际试图运行的内容和实际运行的内容……是的,如果您使用[]
作为默认值(而不是False
)然后
的循环将按原样工作,或者实际上是一个不可操作的循环…@JonClements谢谢你的提及,补充道。斯莱特我编辑了这篇文章来澄清我的要求。请帮我一下。再次感谢。@sunita您正在调用solver
,但您的函数名为solve\u one\u shop
——请确保您的代码在您的问题中是正确的,因为它会混淆您的实际情况