我有一个词典,我想搜索与我需要的特定值相对应的键(在这种情况下为S009
和S007
)
我编写了以下代码,但没有得到任何帮助
这是我的代码:
def find():
L = [{"V": "S001"},
{"V": "S002"},
{"V": "S001"},
{"V": "S001"},
{"V": "S001"},
{"V1": "S002"},
{"V111": "S005"},
{"V2": "S005"},
{"V": "S009"},
{"V3": "S007"}]
L1 = []
for y in range (len(L)) :
for j in L[y].values():
L1.append(j)
L2=[]
for z in L1:
if z not in L2:
L2.append(z)
count =0
l3=[]
s = set(L1)
for z in L2:
for y in L1:
if z in L2:
count =count +1
if count == 2:
l3.append(z)
for s in l3:
print(s)
def main():
find()
main()
我的代码解释了:首先,我将列表中的所有值都命名为L1
。然后,我得到所有值,而没有被复制到L2
中。然后,我想搜索L2
中是否存在L1
的元素。在此循环之后,如果count
仅变成一个,那么这就是我要查找的值,并将其附加到名为l3
的空列表中
答案 0 :(得分:0)
您可以分两个步骤进行操作。首先从L中提取所有值:
values = []
for i in L:
for v in i.values():
values.append(v)
或作为列表理解:
values = [v for i in L for v in i.values()]
然后过滤出计数大于1的项目。
result = [i for i in values if values.count(i) == 1]
print (result)
结果:
['S009', 'S007']
答案 1 :(得分:0)
您在上文中定义为L
的是单个词典的列表。我不确定这是预期的。您说您期望输出应该是's009'
和's007'
,所以我要假设,您可能想让L只是每个字典的值的列表。就是这种情况,
L = ["S001", "S002", "S001", "S001", "S001", "S002", "S005", "S005", "S009", "S007"]
计算列表项数最简单的方法之一是使用collections
模块中的Counter
。
然后只需将Counter
作为唯一参数创建L
from collections import Counter
c = Counter(L)
print(c)
Counter({'S001': 4, 'S002': 2, 'S005': 2, 'S009': 1, 'S007': 1})
现在您可以看到L
每个元素存在多少个实例。从那里开始,您只需要使用一点列表理解就可以过滤掉没有一个实例的任何东西。
result = [key for key, value in c.items() if value == 1]
print(result)
['S009', 'S007']
所有代码:
from collections import Counter
L = ["S001", "S002", "S001", "S001", "S001", "S002", "S005", "S005", "S009", "S007"]
c = Counter(L)
result = [key for key, value in c.items() if value == 1]