Я хочу иметь цикл (например, цикл while), который проверяет, все ли элементы словаря больше, чем элементы из другого словаря. Это словарь требований и 2 примера словарей для проверки:

requirements = {"happiness":9, "money": 100}

person1 = {"happiness": 15, "money": 3200}
person2 = {"happiness": 4, "money": 5000}

И цикл While будет выглядеть так:

while person >= requirements:
    p = Counter(person)
    p.subtract(requirements)
    person = dict(p)

Когда он проверяет, выполняет ли человек требования, я хочу, чтобы он был Истинным, только если ВСЕ требования выполнены.

ПРИМЕЧАНИЕ: Часть внутри цикла while, где требования вычитаются из человека, может быть проигнорирована, она не имеет ничего общего с вопросами, но это код, который я использую

0
by James 9 Июл 2019 в 14:56

3 ответа

Лучший ответ

Вам не нужны явные циклы в Python для решения такого рода проблем, используйте такие выражения:

all(value > requirements[key] for key, value in person1.items())
2
ipaleka 9 Июл 2019 в 12:09

Не уверен, для чего предназначен цикл while, но я думаю, что в этом случае будет достаточно простого цикла for.

from operator import gt

people = [person1, person2]
for person in people:
    thresholds = [gt(person.get(k), requirements.get(k, 0)) for k in person.keys()]
    if all(thresholds):
        print(f'Person --> {person} meets requirements')

Person --> {'happiness': 15, 'money': 3200} meets requirements

ПРИМЕЧАНИЕ: f-строки работают только на> = Python 3.6

0
aws_apprentice 9 Июл 2019 в 12:04

Надеюсь, мой вопрос вдохновит вас. Моя функция bigger_than_reqiurements() проверяет один person, используя все ключи, которые он может найти в require. Он возвращает True, только если все значения больше, чем reqiure.

#!/usr/bin/env python3

def bigger_than_requirements(person, require):
    for key in require:
        if person[key] <= require[key]:
            return False

    return True

if __name__ == '__main__':
    all_persons = [{"happiness": 15, "money": 3200},
                   {"happiness": 4, "money": 5000}]
    requirements = {"happiness": 9, "money": 100}

    for person in all_persons:
        if bigger_than_requirements(person, requirements):
            print('Bigger: {}'.format(person))

Вы также можете добавить обработку исключений для KeyError, если ключ отсутствует в person.

try:
    if person[key] <= require[key]:
        return False
except KeyError:
    return False
0
buhtz 9 Июл 2019 в 12:11