在列表中追加字典的键当且仅当该键的所有值在另一个列表中找到时

2024-05-16 14:52:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的条件:

  • 如果在c中找到A,则在L中附加A1
  • 如果找到a1和a2,则在L中附加A
  • 如果找到a1而没有找到a2,那么A不应该附加在L中
  • 如果对于键a1的值,如果找到了a11而没有找到a12,那么a1不应该附加在列表L中,这个条件的结果将是一个空列表
  • 如果所有像a1,a2,a11和a12这样的值都在c中,那么键a1,A和a1应该附加到列表L中

下面是我的代码:

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' ]


Tags: intxta2列表forifa1items
1条回答
网友
1楼 · 发布于 2024-05-16 14:52:37

这样做有效:

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']

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

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

相关问题 更多 >