Поиск точных значений в словаре - PullRequest
0 голосов
/ 12 марта 2019

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

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

То, что вы определили выше как 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]
0 голосов
/ 12 марта 2019

Вы можете сделать это в два этапа.Сначала извлеките все значения из 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...