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