我对词典有疑问。
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()}
答案 0 :(得分:3)
你应该使用dict comprehension,而不是集合理解:
>>> 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}
>>>
答案 1 :(得分:1)
iCodez的回答是正确的(我赞成它:))。但是当理解变得复杂时,我认为打破它们是一个好主意。至少对我而言,它可以帮助我更好地了解更多信息:
def multi(order):
d = {}
for k, v in food[order[0]].items():
d[k] = float(v * order[1])
return d
答案 2 :(得分:0)
>>> def multi(order):
... if order[0] in food.keys():
... return { x:float(y*order[1]) for x,y in food[order[0]].items() }
... else:return "Item not found"
...
>>> multi(["omlette",4])
{'egg': 4, 'ham': 0.8}
您还可以检查该项目是否在食物词典中
如果你想传递元组:
>>> 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}]