Поиск точных значений в словаре

#python #function #dictionary #search

#python #функция #словарь #Поиск

Вопрос:

У меня есть словарь, и я хочу выполнить поиск ключей, которые соответствуют определенному значению, которое мне нужно ( 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

Комментарии:

1. Пожалуйста, исправьте свой отступ.

2. Это была самая ужасающая правка, которую я когда-либо делал. Пожалуйста, отформатируйте свой вопрос и код перед его публикацией

Ответ №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()]
  

Затем отфильтруйте элементы с числом больше 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"]
  

Один из самых простых способов подсчитать количество элементов списка — использовать Counter из collections модуля.

Затем просто создайте 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]