如何检查字典中的列表值是否匹配

时间:2018-09-10 01:14:33

标签: python python-3.x dictionary

我正在尝试从列表中找到与字典值中的列表匹配的内容

例如,词典包含

dict = {test1:[1, 2, 3, 4], test2:[2, 2, 3, 4], test3:[1,2,4,5], 
        test4:[6,2,3,4], test5:[7, 2, 3,4]}

和我需要查找是否匹配的数据

answer = [6,2,3,4]

我尝试进行任何测试,其中推算出的答案的第一个值必须不同,而其余的则相同,例如

[(这是不同的),2、3、4]

所以最后我要记录test1,test2和test 5。

谢谢!

5 个答案:

答案 0 :(得分:0)

您可以遍历字典的各项,并将子列表的切片与要检查的列表的切片进行比较:

d = {'test1':[1, 2, 3, 4], 'test2':[2, 2, 3, 4], 'test3':[1,2,4,5], 'test4':[6,2,3,4], 'test5':[7, 2, 3,4]}
def check(d, l):
    for k, v in d.items():
        if v != l and v[1:] == l[1:]:
            yield k
print(list(check(d, [6, 2, 3, 4])))

这将输出:

['test1', 'test2', 'test5']

答案 1 :(得分:0)

假设您有一个带有字符串键的有效字典,则使用列表推导可以过滤出不需要的键,如下所示:

d = {
    "test1": [1, 2, 3, 4], 
    "test2": [2, 2, 3, 4], 
    "test3": [1, 2, 4, 5], 
    "test4": [6, 2, 3, 4], 
    "test5": [7, 2, 3, 4]
}
answer = [6, 2, 3, 4]

result = [k for k, v in d.items() if v[0] != answer[0] and v[1:] == answer[1:]]

print(result)

输出:

['test1', 'test2', 'test5']

请注意,dict = ...会覆盖内置函数dict,但这不是一个好主意。

这里是repl进行测试。

答案 2 :(得分:0)

解决方案

dict_a = { 
    'test 1': [1, 2, 3, 4], 'test 2': [2, 2, 3, 4], 'test 3': [1, 2, 4, 5], 
    'test 4': [6, 2, 3, 4], 'test 5': [7, 2, 3, 4]
}

answer = [6, 2, 3, 4]

for i in dict_a:
    if answer[0] != dict_a[i][0]:
        if answer[1:4] == dict_a[i][1:4]:
            print(dict_a[i])

存储输出

answer = [6, 2, 3, 4]
store = {}

for i in dict_a:
    if answer[0] != dict_a[i][0]:
        if answer[1:4] == dict_a[i][1:4]:
            store[i] = dict_a[i]

for k in store:
    print(f"{k}: {store[k]}")

输出

(xenial)vash@localhost:~/python/AtBS$ python3.7 list_dict.py 
[1, 2, 3, 4]
[2, 2, 3, 4]
[7, 2, 3, 4]

答案 3 :(得分:0)

我认为您的代码有几个问题。 首先,由于dict是关键字,因此应避免将其作为变量名。 其次,未定义变量test1,test2等。在这种情况下,最好使用'test1','test2'等

无论如何,请参见下面的答案。

            dic = {'test1':[1, 2, 3, 4], 'test2':[2, 2, 3, 4], 'test3':[1,2,4,5], 
                'test4':[6,2,3,4], 'test5':[7, 2, 3,4]}


            toMatch = [6,2,3,4]

            matching = []
            for (key, value) in dic.items():
                if((value[1:]==toMatch[1:])&(value[0]!=toMatch[0])):
                    print(key,value)
                    matching.append(key)

            print('Matching keys are:', matching)

答案是:

test1 [1, 2, 3, 4]
test2 [2, 2, 3, 4]
test5 [7, 2, 3, 4]
Matching keys are: ['test1', 'test2', 'test5']

答案 4 :(得分:0)

请注意,您应该考虑将其抽象为函数。

def match_records(a, b):
    return a[-3:] == b[-3:] and a[0] != b[0]

results = {k:v for k, v in d.items() if match_records(answers, v)}