我正在尝试从列表中找到与字典值中的列表匹配的内容
例如,词典包含
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。
谢谢!
答案 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)}