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 中,并且此条件的结果将是一个空列表。
- 如果在 c 中找到所有值,如 a1、a2、a11 和 a12,则键 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' ]
解决方案
这有效:
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'
部分。
然后,我们遍历字典并检查过滤列表中是否存在所有值。
推荐阅读
- ssis - BIML 生成包的文件名
- python - 如何从 python 中的 DICOM 文件中获取仿射信息?
- git - BitBucket 显示来自两个不同分支的两个提交
- java - 如何使用 JPA、Hibernate 将数据添加到与额外列的多对多关联
- python - 验证特定范围内的 int 数字。Python-3.x
- java - java Gherkin解析器流不释放文件锁
- webrtc - SFU 与 Kinesis 视频流 SDK js
- github - 是否可以直接下载 Github-Actions 工件?
- android - 背景音乐应该在播放视频时回避(暂停)
- android - 如何在视图寻呼机中使用 Exoplayer?