Python 嵌套字典获取内部值

Python 嵌套字典获取内部值,python,Python,我想知道当你在字典中有一个字典时,如何根据“两个”键获取值。 i、 e: 如何找到瑞克住的地方?(房屋及街道) 什么是最快的方式让所有的斯特雷塔人 如何找到瑞克住的地方?(房屋及街道) 您可以使用列表: [(hs,st) for st, j in street_dict.items() for hs in j if 'Rick' in set(house_dict[hs])] # [('HouseB1', 'streetB')] def find_person(name): f

我想知道当你在字典中有一个字典时,如何根据“两个”键获取值。 i、 e:

  • 如何找到瑞克住的地方?(房屋及街道)
  • 什么是最快的方式让所有的斯特雷塔人
  • 如何找到瑞克住的地方?(房屋及街道)
您可以使用列表:

[(hs,st) for st, j in street_dict.items() for hs in j if 'Rick' in set(house_dict[hs])]
# [('HouseB1', 'streetB')]
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))
  • 什么是最快的方式让所有的斯特雷塔人
与上述方法类似:

from itertools import chain

list(chain.from_iterable([house_dict[house] for house in street_dict["streetA"]]))
# ['Jack', 'Jones', 'Joel', 'Paul', 'Lucas', 'Martin']

找到瑞克。不使用列表理解:

[(hs,st) for st, j in street_dict.items() for hs in j if 'Rick' in set(house_dict[hs])]
# [('HouseB1', 'streetB')]
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))
让所有人在一条街上:

def get_persons(street):
    persons = []
    for house in street_dict.get(street, []):
        persons.extend(house_dict.get(house, []))
    return persons

您可以将数据重建到更合适的字典中

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'},..
那么您的查询将被删除

# where lives Jordan    
print(s['Jordan'])
# all persons of StreetA
print([person for person, address in s.items() if address['street'] == 'streetA'])

做dict{person:[street,house}]}你会得到任何信息,而不会加入任何内容。如果我做对了,你会建议用这两个词做一个dict,对吗?你能发布这样做的代码吗?我认为你的“}”有一点语法错误。是的-两次:)你能给我一个简短的解释一下ur“j”代表什么,以及为什么
set(house_dict[hs])]
中的
set
是必需的吗?
j
对应于dict的
值,即内部列表,因此,“for hs in j”将检索LST中的所有值。第二点值得注意的是,
集合
在检查CRoNiC成员资格方面比列表更有效