#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]