在字典中搜索精确值

时间:2019-03-12 03:16:49

标签: python function dictionary search

我有一个词典,我想搜索与我需要的特定值相对应的键(在这种情况下为S009S007

我编写了以下代码,但没有得到任何帮助

这是我的代码:

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的空列表中

2 个答案:

答案 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]