Me preguntaba cómo obtener valores dependiendo de "dos" claves, cuando tienes un diccionario en un diccionario. es decir.:
street_dict ={"streetA": ["HouseA1", "HouseA2"],
"streetB": ["HouseB1", "HouseB2"]}
house_dict = {"HouseA1" : ["Jack", "Jones", "Joel"],
"HouseA2" : ["Paul", "Lucas", "Martin"],
"HouseB1" : ["Rick", "Jordan", "Michael"],
"HouseB2" : ["Peter", "George", "Toni"]}
- ¿Cómo saber dónde vive Rick? (Casa y calle)
- ¿Cuál es la forma más rápida de obtener todas las personas de StreetS?
3 respuestas
- ¿Cómo saber dónde vive Rick? (Casa y calle)
Podrías usar una lista de comprensión:
[(hs,st) for st, j in street_dict.items() for hs in j if 'Rick' in set(house_dict[hs])]
# [('HouseB1', 'streetB')]
- ¿Cuál es la forma más rápida de obtener todas las personas de StreetA?
De manera similar al enfoque anterior:
from itertools import chain
list(chain.from_iterable([house_dict[house] for house in street_dict["streetA"]]))
# ['Jack', 'Jones', 'Joel', 'Paul', 'Lucas', 'Martin']
Encuentra a Rick. No usar la comprensión de la lista:
def find_person(name):
for house, persons in house_dict.items():
if name in persons:
for street, houses in street_dict.items():
if house in houses:
print("{} lives at {} {}".format(name, house, street))
Obtenga todas las personas en una calle:
def get_persons(street):
persons = []
for house in street_dict.get(street, []):
persons.extend(house_dict.get(house, []))
return persons
Puede reconstruir sus datos en un diccionario más adecuado
hs = {house:street for street,houses in street_dict.items() for house in houses}
s = {person: {'street':hs[house], 'house':house} for house, persons in house_dict.items() for person in persons}
# {'Jack': {'street': 'streetA', 'house': 'HouseA1'}, 'Jones': {'street': 'streetA', 'house': 'HouseA1'},..
Entonces su consulta será
# where lives Jordan
print(s['Jordan'])
# all persons of StreetA
print([person for person, address in s.items() if address['street'] == 'streetA'])
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.