Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从元组对列表中搜索dict中的键_Python_Dictionary - Fatal编程技术网

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