首页 > 解决方案 > 当且仅当在另一个列表中找到该键的所有值时,将字典的键附加到列表中

问题描述

L = [ ]
a ={ 'A1' : [ 'A'] }
b = { 'A' : [ 'a1', 'a2'] , 'a1' : ['a11' , 'a12'] }
c = [  'a11.txt' , 'a3.txt' ]

我的条件:

下面是我的代码:

for k,v in a.items():
    for element in v:
        if element +'.txt' in c :
            L.append(k)
        else:
            for k1,v1 in b.items():
                if element == k1:
                    for element1 in v1:
                        if element1+'.txt' in c:
                            L.append(k1)
                        else:
                            for k1,v1 in b.items():
                                if element1 == k1 :
                                    for element2 in v1 :
                                        if element2+'.txt' in c :
                                            L.append(k1)

我想要的结果应该是L = [ ] 但我得到了L = [ 'a1' ]

标签: python

解决方案


这有效:

a = {'A1': [ 'A']}
b = {'A': ['a1', 'a2'], 'a1': ['a11' , 'a12']}

a.update(b)

c = ['a11.txt', 'a1.txt', 'a2.txt', 'A.txt'] 
c = [x[:-4] for x in c]

L = [k for k, v in a.items() if all(x in c for x in v)]  
print(L)
# ['A1', 'A']

不需要两本字典。我合并了它们(或者如果你一开始可以使用单个,那会更好)并过滤c列表以删除'.txt'部分。

然后,我们遍历字典并检查过滤列表中是否存在所有值。


推荐阅读