Как узнать, присутствует ли значение в списке значений в словаре? - PullRequest
0 голосов
/ 10 июля 2020

Так вот в чем вопрос. Я пытаюсь определить, является ли конкретное значение частью списка значений в словаре. когда я пытался использовать .values(), это не сработало. Вот код. Указанная часть не входит go в оператор if.

company_dict = dict()

while True:
    command = input()
    if command == 'End':
        break

    (employer,id_worker) = command.split(' -> ')

    if id_worker in company_dict.values():  # THIS
        continue                            # PART
    else:
        if employer not in company_dict:
            company_dict[employer] = []
        company_dict[employer].append(id_worker)

И вот как мне удалось ее решить, но это крайне неэффективно:

while True:
    flag = 0
    command = input()
    if command == 'End':
        break

    (employer,id_worker) = command.split(' -> ')
    for key,values in company_dict.items():
        for i in values:
            if id_worker == i and employer == key:
                flag = 1

    if flag == 1:
        continue
    else:
        if employer not in company_dict:
            company_dict[employer] = []
        company_dict[employer].append(id_worker)

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Вы можете break из for l oop, если найдете совпадение, а затем использовать else после for l oop, чтобы обозначить выполнение некоторого кода, если for l oop достиг конца без break.

while True:
    command = input()
    if command == 'End':
        break

    (employer,id_worker) = command.split(' -> ')
    for key,values in company_dict.items():
        if employer == key and id_worker in values:
            break
    else:
        if employer not in company_dict:
            company_dict[employer] = []
        company_dict[employer].append(id_worker)

Это будет более эффективно, чем то, что есть у вас, потому что вы прекращаете поиск после первого совпадения - как из-за break из явного l oop и тот факт, что выражение id_worker in values перестанет повторяться при первом совпадении. (Здесь использование in для тестирования включения также позволяет избежать использования явного l oop для итерации над values, поэтому также может быть немного быстрее по этой причине.)

0 голосов
/ 10 июля 2020

Это напечатает «True», если ключ существует в словаре. Это в основном то же самое, что и у вас, и оно должно работать нормально, проверьте, печатает ли он «True»

company_dict = dict()
 
while True:
    command = input("employer -> worker_id")
    if command.lower() == 'end':
        break
 
    employer, id_worker = command.split(' -> ')
 
    if id_worker in company_dict.values():
        print(True)
        continue
    else:
        if not company_dict.get(employer, false):
            company_dict[employer] = [worker_id]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...