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

时间:2014-11-16 20:17:10

标签: 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):
    return {key for key,value in order if key in food.keys()}

3 个答案:

答案 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}]
相关问题