遍历列表中包含列表的字典

时间:2016-06-10 23:19:31

标签: python list dictionary

我试图找出一种方法来匹配字典中嵌套列表中的值。我们说我有这种结构;

dict2 = {'key1': [ 2, ['value1', 3], ['value2', 4] ], 'key2' : [1, ['value1', 2], ['value2', 5] ], 'key3' : [7, ['value1', 6], ['value2', 2], ['value3', 3] ] }

现在让我们对key1说,我想迭代遍历列表的第一个值,只是为了寻找数据匹配。所以,如果我的数据是" value2"我想在key1中查找它,然后我希望它跳过' 2'并检查两个列表中的第一个对象是什么; value1,匹配的value2和它。

尝试这样做,但它给了一个keyerror:1;

if 'value1' in dict2[1][1:]:
    print 'true'
else:
    print 'false'

这可能吗?还有其他方法可以进行匹配搜索吗?感谢。

5 个答案:

答案 0 :(得分:2)

您问题中的代码使用数字索引而不是字符串'key1'。这是一个应该有效的修改版本:

if 'value1' in {array[0] for array in dict2.get('key1', [])[1:]}:
    print 'true'
else:
    print 'false'

查看字典中与'key1'关联的数组中的第一个元素之后的所有元素(如果存在)。

答案 1 :(得分:1)

如果您确信给定的嵌套字典始终具有此格式,那么我们可以执行以下操作:

def find_value(nested_dict, value):
    for key, nested_list in nested_dict.items():  # If Python 2, use .iteritems() instead.
        for inner_list in nested_list[1:]:
            if value == inner_list[0]:
                return True
    return False

dict2 = {'key1': [ 2, ['value1', 3], ['value2', 4] ], 'key2' : [1, ['value1', 2], ['value2', 5] ], 'key3' : [7, ['value1', 6], ['value2', 2], ['value3', 3] ] }

print(find_value(dict2, 'value2'))  # True
print(find_value(dict2, 'value5'))  # False

答案 2 :(得分:0)

请改为尝试:

if 'value1' in d['key1'][1]:
     print('Value 1 found')

if 'value2' in d['key1'][2]:
     print('Value 1 found')

答案 3 :(得分:0)

如果您只在列表中查找,可以执行以下操作:

for key, value in my_dict.items():
    for item in value:
        if isintance(item, list):
            if desired_value in item:
                return item # Here it is!

答案 4 :(得分:0)

试试这个:

for x,v in dict2.items():
   if x == "key1":
     for i, e in enumerate(v):
        try:
            if e[0] == 'value2':
               print "True"
            else: print "False"
        except:pass
相关问题