繁体   English   中英

从元组对列表中搜索dict中的键

[英]Searching for keys in dict, from list of tuple pairs

我对字典有疑问。

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()}

您应该使用dict理解 ,而不是set理解:

>>> 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
>>> 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}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM