Python 在字典字典中查找字符串作为值,并返回其键 我需要写一个函数,它正在做下面的工作

Python 在字典字典中查找字符串作为值,并返回其键 我需要写一个函数,它正在做下面的工作,python,list,dictionary,python-2.5,Python,List,Dictionary,Python 2.5,在字典字典中查找字符串作为值,并返回其键 (如果在主字典中找到第一个键,如果在子字典中找到第二个键) 源代码 这是我试图实现的函数,但它不正确,因为我找不到任何关于如何将列表转换为字典的答案,因为在这种情况下会发生以下错误 对于v,k在l中: ValueError:需要超过1个值才能解包 我必须在Python2.5上执行此操作您创建了一个仅包含字典值的列表,然后尝试在其上循环,好像它已经包含这些字典的键和值一样。也许你想在每个匹配的字典上循环 l = [v for v in dictionary

在字典字典中查找字符串作为值,并返回其键 (如果在主字典中找到第一个键,如果在子字典中找到第二个键)

源代码 这是我试图实现的函数,但它不正确,因为我找不到任何关于如何将列表转换为字典的答案,因为在这种情况下会发生以下错误

对于v,k在l中: ValueError:需要超过1个值才能解包

我必须在Python2.5上执行此操作

您创建了一个仅包含字典值的列表,然后尝试在其上循环,好像它已经包含这些字典的键和值一样。也许你想在每个匹配的字典上循环

l = [v for v in dictionary.values() if  ":" in str(v)]
d = defaultdict(list)
for subdict in l:
    for k, v in subdict.items():
相反,我会将结构展平:

def flatten(dictionary):
    for key, value in dictionary.iteritems():
        if isinstance(value, dict):
            # recurse
            for res in flatten(value):
                yield res
        else:
            yield key, value
然后只需搜索:

def GetKeyFromDictByValue(self, dictionary, value_to_find):
    for key, value in flatten(dictionary):
        if value == value_to_find:
            return key
演示:

您创建了一个仅包含字典值的列表,然后尝试在其上循环,好像它已经包含这些字典的键和值一样。也许你想在每个匹配的字典上循环

l = [v for v in dictionary.values() if  ":" in str(v)]
d = defaultdict(list)
for subdict in l:
    for k, v in subdict.items():
相反,我会将结构展平:

def flatten(dictionary):
    for key, value in dictionary.iteritems():
        if isinstance(value, dict):
            # recurse
            for res in flatten(value):
                yield res
        else:
            yield key, value
然后只需搜索:

def GetKeyFromDictByValue(self, dictionary, value_to_find):
    for key, value in flatten(dictionary):
        if value == value_to_find:
            return key
演示:


使用
len(键列表)
,而不是
键列表。
。非零值为布尔真:
如果len(键列表):
就足够了。您不应该将变量命名为
dict
;这会屏蔽内置类型,实际上会阻止您在此处对值使用
isinstance()
,因为您现在无法测试该类型。请使用
len(key\u list)
,而不是
key\u list.\uu len\uu()
。非零值为布尔真:
如果len(键列表):
就足够了。您不应该将变量命名为
dict
;这会屏蔽内置类型,实际上会阻止您在此处的值上使用
isinstance()
,因为您现在无法测试该类型。