Python 从元组对列表中搜索dict中的键
我有一个关于词典的问题Python 从元组对列表中搜索dict中的键,python,dictionary,Python,Dictionary,我有一个关于词典的问题 food = { 'omlette' : { 'egg': 1, 'ham': 0.2 }, 'soup' : { 'water': 1 , 'vegetables': 2, 'meat': 4 }} 和一份清单: order(['omlette', 4]) 我想退回dict food(values)所需份数的食材。所以我的结果应该是这样的: { 'egg': 4.0 , 'ham': 0.8 } 我应该对这种理解补充什么 def multi(order):
food = { 'omlette' : { 'egg': 1, 'ham': 0.2 }, 'soup' : { 'water': 1 , 'vegetables': 2, 'meat': 4 }}
和一份清单:
order(['omlette', 4])
我想退回dict food(values)
所需份数的食材。所以我的结果应该是这样的:
{ 'egg': 4.0 , 'ham': 0.8 }
我应该对这种理解补充什么
def multi(order):
return {key for key,value in order if key in food.keys()}
您应该使用一个而不是一套理解:
>>> def multi(order):
... return {k:float(v * order[1]) for k, v in food[order[0]].items()}
...
>>> multi(["omlette", 4])
{'egg': 4.0, 'ham': 0.8}
>>>
您应该使用一个而不是一套理解:
>>> def multi(order):
... return {k:float(v * order[1]) for k, v in food[order[0]].items()}
...
>>> multi(["omlette", 4])
{'egg': 4.0, 'ham': 0.8}
>>>
iCodez的答案是正确的(我投了更高的票:)。但当理解变得如此复杂时,我认为把它们分解是个好主意。至少对我来说,这有助于我更好地了解情况:
def multi(order):
d = {}
for k, v in food[order[0]].items():
d[k] = float(v * order[1])
return d
iCodez的答案是正确的(我投了更高的票:)。但当理解变得如此复杂时,我认为把它们分解是个好主意。至少对我来说,这有助于我更好地了解情况:
def multi(order):
d = {}
for k, v in food[order[0]].items():
d[k] = float(v * order[1])
return d
您还可以检查该项目是否在食品词典中如果要传递元组:
>>> def multi(order):
... return [ { i:float(j*y) for i,j in food[x.lower()].items() } for x,y in order if x.lower() in food.keys() ]
>>> multi([('omlette', 4),('Soup' ,1)])
[{'egg': 4.0, 'ham': 0.8}, {'water': 1.0, 'vegetables': 2.0, 'meat': 4.0}]
您还可以检查该项目是否在食品词典中如果要传递元组:
>>> def multi(order):
... return [ { i:float(j*y) for i,j in food[x.lower()].items() } for x,y in order if x.lower() in food.keys() ]
>>> multi([('omlette', 4),('Soup' ,1)])
[{'egg': 4.0, 'ham': 0.8}, {'water': 1.0, 'vegetables': 2.0, 'meat': 4.0}]
谢谢您的回答:)如果找不到密钥,它将返回keyError。>>>def多(订单):。。。返回k的{k:float(v*order[1]),食品[order[0]]中的v。items()}…>>多(['kfc',5])回溯(最后一次调用):文件“”,第1行,在文件“”中,第2行,在multi-KeyError中:“kfc”感谢您的回答:)如果找不到密钥,它将返回KeyError。>>>def多(订单):。。。返回k的{k:float(v*order[1]),食品[order[0]]中的v。items()}…>>multi(['kfc',5])回溯(最后一次调用):文件“”,第1行,在文件“”中,第2行,在multi KeyError:“kfc”的确,我是python新手,为了不丢失,最好在开始时使用它。哦,我忘了在最后返回
d
。确实,我是python新手,为了不迷路,最好一开始就使用它。哦,我忘了在结尾返回d
。编辑它以执行此操作。这取决于所需的行为。如果找不到该项,Python将抛出异常并打印消息。上面的代码更改了消息,不再带错误退出。它还从希望返回dict
的函数返回string
,这是不理想的。return“Item not found”
返回字符串,而不是dict
。这取决于所需的行为。如果找不到该项,Python将抛出异常并打印消息。上面的代码更改了消息,不再带错误退出。它还从一个函数返回一个字符串
,该函数期望返回一个dict
,这是不理想的。return“Item not found”
返回一个字符串
,而不是dict
。