Python 使用密钥获取值

Python 使用密钥获取值,python,list,dictionary,Python,List,Dictionary,我有一本字典 myDict = {'a': [1, 2, 3, 'cow', {'b': 23}], 'c': 25 'd': [4,5,6]} 我想创建一个函数来获取键的值。这是我目前的代码: def getValueOf(key, myDict): for d in myDict: if key in d: return d[key] 此代码仅适用于某些词典。我似乎不能再考虑别的解决办法了 这是我的预期输出: getValueO

我有一本字典

myDict = {'a': [1, 2, 3, 'cow', {'b': 23}],
         'c': 25
         'd': [4,5,6]}
我想创建一个函数来获取键的值。这是我目前的代码:

def getValueOf(key, myDict):
for d in myDict:
    if key in d:
        return d[key]
此代码仅适用于某些词典。我似乎不能再考虑别的解决办法了

这是我的预期输出:

getValueOf('b', myDict) ==> 23
getValueOf('d', myDict) ==> [4,5,6]
getValueOf('a', myDict) ==> [1, 2, 3, 'cow', {'b': 23}]

任何帮助都将不胜感激

下面是一个低效的解决方案,它使用进入列表和目录的递归:

def查找(d,指针):
如果存在(d,dict):
对于输入d:
值=d[键]
如果键==指针:
返回值
其他:
ret=查找(值,指针)
如果ret不是无:
回程网
elif isinstance(d,列表):
对于d中的值:
ret=查找(值,指针)
如果ret不是无:
回程网
一无所获
下面是一个简单的例子:

D={
“a”:2,
“b”:[1,5,9,2,4,[5,6,{“g”:“pouet”}],
“c”:{“d”:“你好”,“e”:{“f”:“世界”}}
打印(查找(D,“D”)、查找(D,“f”))
打印(查找(D,“g”))
返回:

hello world
pouet
这可能被认为是不正确的,因为
None
可能是有效值。 要正确处理这种可能性,不妨考虑这个问题:

def查找(d,指针):
如果存在(d,dict):
对于输入d:
值=d[键]
如果键==指针:
返回值
其他:
尝试:
返回查找(值,指针)
除运行时错误外:
通过
elif isinstance(d,列表):
对于d中的值:
尝试:
返回查找(值,指针)
除运行时错误外:
通过
引发运行时错误

下面是一个低效的解决方案,它使用进入列表和目录的递归:

def查找(d,指针):
如果存在(d,dict):
对于输入d:
值=d[键]
如果键==指针:
返回值
其他:
ret=查找(值,指针)
如果ret不是无:
回程网
elif isinstance(d,列表):
对于d中的值:
ret=查找(值,指针)
如果ret不是无:
回程网
一无所获
下面是一个简单的例子:

D={
“a”:2,
“b”:[1,5,9,2,4,[5,6,{“g”:“pouet”}],
“c”:{“d”:“你好”,“e”:{“f”:“世界”}}
打印(查找(D,“D”)、查找(D,“f”))
打印(查找(D,“g”))
返回:

hello world
pouet
这可能被认为是不正确的,因为
None
可能是有效值。 要正确处理这种可能性,不妨考虑这个问题:

def查找(d,指针):
如果存在(d,dict):
对于输入d:
值=d[键]
如果键==指针:
返回值
其他:
尝试:
返回查找(值,指针)
除运行时错误外:
通过
elif isinstance(d,列表):
对于d中的值:
尝试:
返回查找(值,指针)
除运行时错误外:
通过
引发运行时错误
我做了一个稍微不同的版本,也许更容易理解


我做了一个稍微不同的版本,也许更容易理解,但另一个可以说是简单的版本

def get_值(findkey,元素):
isdict=类型(元素)=dict
找到=无
对于元素中的val:
如果isdict和val==findkey:
返回元素[val]
val=元素[val]如果为val
如果在[list,dict]中键入(val):
found=获取_值(findkey,val)
如果发现:
返回发现
结果

myDict = {
    "a": 2,
    "b": [1, 5, 9, 2, 4, [5, 6, {"g": "pouet"}]],
    "c": {"d": "hello", "e": {"f": "world"}},
    "h": None,
}


{c: get_value(c, myDict) for c in list('abcdefgh')}
>>>
{'a': 2,
 'b': [1, 5, 9, 2, 4, [5, 6, {'g': 'pouet'}]],
 'c': {'d': 'hello', 'e': {'f': 'world'}},
 'd': 'hello',
 'e': {'f': 'world'},
 'f': 'world',
 'g': 'pouet',
 'h': None}

另一个可以说是简单的版本

def get_值(findkey,元素):
isdict=类型(元素)=dict
找到=无
对于元素中的val:
如果isdict和val==findkey:
返回元素[val]
val=元素[val]如果为val
如果在[list,dict]中键入(val):
found=获取_值(findkey,val)
如果发现:
返回发现
结果

myDict = {
    "a": 2,
    "b": [1, 5, 9, 2, 4, [5, 6, {"g": "pouet"}]],
    "c": {"d": "hello", "e": {"f": "world"}},
    "h": None,
}


{c: get_value(c, myDict) for c in list('abcdefgh')}
>>>
{'a': 2,
 'b': [1, 5, 9, 2, 4, [5, 6, {'g': 'pouet'}]],
 'c': {'d': 'hello', 'e': {'f': 'world'}},
 'd': 'hello',
 'e': {'f': 'world'},
 'f': 'world',
 'g': 'pouet',
 'h': None}

为什么在中使用
?使用
=
。对于列表和dict,您可能需要在
getValueOf
函数中使用某种形式的递归,以便它适用于嵌套对象。为什么
中的
?使用
=
。对于列表和dict,您可能需要在
getValueOf
函数中使用某种形式的递归,以便它像魔术一样适用于嵌套对象。现在,我只需要研究这些线路,了解它是如何工作的。非常感谢你@尤里卡:我从几个方面改进了这个解决方案,我希望它能有所帮助。也许写“for key in d:value=d[key]”更简洁的方法是写“for key,value in d.items():”效果很神奇。现在,我只需要研究这些线路,了解它是如何工作的。非常感谢你@Eureka我从几个方面改进了这个解决方案,我希望它能有所帮助也许写“for key in d:value=d[key]”更简洁的方法是写“for key,value in d.items():“我认为如果第一次看到指针时,返回get()
行会过早中断搜索。顺便说一句,我更新了。事实上,我没有想到这一点。我认为如果指针不在第一次看到的dict中,
return get()
行将过早中断搜索。顺便说一句,我更新了。事实上,我没有想到这一点