我试图找出一种方法来匹配字典中嵌套列表中的值。我们说我有这种结构;
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'
这可能吗?还有其他方法可以进行匹配搜索吗?感谢。
答案 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