Есть ли функция для фильтрации моего словаря с помощью другого словаря?

#python #python-3.x #dictionary #spyder

#python #python-3.x #словарь #spyder

Вопрос:

Я пытаюсь отфильтровать МЕСТОПОЛОЖЕНИЕ моего словаря с помощью dictionary LOCATION_SUPPLY_OPEN. Если значение LOCATION_SUPPLY_OPEN равно 1, в new_dict должен быть ключ (который равен 1) со значением местоположения словаря с тем же ключом.

Я пробовал это с разными функциями, но это не сработало надеюсь, вы сможете мне помочь, потому что я совсем новичок в Python Спасибо!

 
LOCATION = {
    'Berlin': (13.404954, 52.520008), 
    'Cologne': (6.953101, 50.935173),
    'Hamburg': (9.993682, 53.551086),
    'Stuttgart': (9.181332, 48.777128),
    'Munich': (11.576124, 48.137154),
    }


# Open Location Dictionary kinda Binary,  1:open Location, 0:otherwise
LOCATION_SUPPLY_OPEN = {
    'Berlin': (0), 
    'Cologne': (1),
    'Hamburg': (0),
    'Stuttgart': (1),
    'Munich': (1),
    }

new_dict = {}
# new_dict should have the keys from LOCATION_SUPPLY_OPEN with a value of 1 and the values of LOCATION
#  new_dict = {"Cologne":(6.953101, 50.935173), 'Stuttgart': (9.181332, 48.777128),'Munich': (11.576124, 48.137154) }


#Here I have tried it but it didn't work

LOCATIONS = {}

for (key,value) in LOCATION_SUPPLY_OPEN.items():
    if value > 0:
        LOCATIONS[key] = LOCATION[value]

  

Ответ №1:

Вы сделали почти все, кроме присвоения правильных значений new_dict

Проверьте это один:

 LOCATION_SUPPLY_OPEN = {
    'Berlin': (0), 
    'Cologne': (1),
    'Hamburg': (0),
    'Stuttgart': (1),
    'Munich': (1),
    }
    
LOCATION = {
    'Berlin': (13.404954, 52.520008), 
    'Cologne': (6.953101, 50.935173),
    'Hamburg': (9.993682, 53.551086),
    'Stuttgart': (9.181332, 48.777128),
    'Munich': (11.576124, 48.137154),
    }
    
new_dict = {}

#  new_dict = {"Cologne":(6.953101, 50.935173), 'Stuttgart': (9.181332, 48.777128),'Munich': (11.576124, 48.137154) }

for key, value in LOCATION_SUPPLY_OPEN.items():
    if value:
       new_dict[key] = LOCATION[key]
       
print(new_dict)
  

С пониманием Dict:

 new_dict = {key: LOCATION[key] for (key, value) in LOCATION_SUPPLY_OPEN.items() if value}
  

Дополнительные оптимизации приветствуются 😉

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

1. Потрясающе, я застрял там больше часа, что точно означает строка:»if value:»? Есть ли значение для ключа больше 0?

2. Вы упомянули в своем вопросе, что значения в LOCATION_SUPPLY_OPEN являются своего рода двоичными, так что 1 означает True , else 0 для False . Вы можете изменить это if условие, если ожидаете других binary значений.