【问题标题】:Searching for an exact values in a Dictionary在字典中搜索精确值
【发布时间】:2019-03-12 03:16:48
【问题描述】:

我有一个字典,我想搜索与我需要的特定值相对应的键(在本例中为 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 的空列表中

【问题讨论】:

  • 请修正你的缩进。
  • 这是我做过的最可怕的编辑。请在发布之前格式化您的问题和代码

标签: python function dictionary search


【解决方案1】:

您可以分两步完成。首先从 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()]

然后过滤掉count大于1的项目:

result = [i for i in values if values.count(i) == 1]
print (result)

结果:

['S009', 'S007']

【讨论】:

    【解决方案2】:

    您在上面定义为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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多