如何按值字符串打印嵌套字典中的键值对

2024-05-16 12:05:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个嵌套字典,里面有几个字典,我想用字符串值打印一个特定键搜索的内容

字典

dict1 = {1:{'Nombre' : 'Tom Cruise', 'Año': '1963', 'Sexo' : 'Masculino', 'Peliculas': 'Mission Impossible, Interview with the vampire' },
         2:{'Nombre': 'Brad Pitt', 'Año' : '1974', 'Sexo': 'Masculino', 'Peliculas': 'Interview with the Vampire, Fight Club'},
         3:{'Nombre': 'Antonio Banderas', 'Año' : '1976', 'Sexo': 'Masculino', 'Peliculas': 'The Mask of Zorro, Desperado'}
        }

我想要的是使用输入捕获一个字符串,并使用该字符串搜索匹配的字典信息。我尝试使用了几个dict方法,包括.items(),但它没有完成我需要它做的事情(通过用户输入获取参与者的姓名并打印关于该条目的所有信息)


Tags: the字符串信息内容字典withcruisetom
2条回答

我想你应该在你的多个字典中进行筛选。此函数有助于理解字典逻辑

dict1 = {1: {'Nombre': 'Tom Cruise', 'Año': '1963', 'Sexo': 'Masculino',
             'Peliculas': 'Mission Impossible, Interview with the vampire'},
         2: {'Nombre': 'Brad Pitt', 'Año': '1974', 'Sexo': 'Masculino',
             'Peliculas': 'Interview with the Vampire, Fight Club'},
         3: {'Nombre': 'Antonio Banderas', 'Año': '1976', 'Sexo': 'Masculino',
             'Peliculas': 'The Mask of Zorro, Desperado'}
         }


def searchInDict(searching):
    for keyMain in dict1:
        for keyChild in dict1[keyMain]:
            if searching in dict1[keyMain][keyChild]:
                return dict1[keyMain][keyChild], keyMain, keyChild


findingVal, key1, key2 = searchInDict("Zorro")
print("Finding Value is '{}': in key '{}' and subKey '{}' field".format(findingVal, key1, key2))

这是一个解决方案,但我为您的词典提出了一个解决方案,但常规且高质量的方法并不适用于词典逻辑。您必须创建一个类,对象列表才能保存您的数据。针对您的情况:

class MyObj:
    def __init__(self, id, nombre, ano, sexo, peliculas):
        self.id = id
        self.nombre = nombre
        self.ano = ano
        self.sexo = sexo
        self.peliculas = peliculas

    def search(self, searching):
        if searching in self.peliculas:
            return self
        return None


dict1 = [MyObj(1, 'Tom Cruise', '1963', 'Masculino', 'Mission Impossible, Interview with the vampire'),
         MyObj(2, 'Brad Pitt', '1974', 'Masculino', 'Interview with the Vampire, Fight Club'),
         MyObj(3, 'Antonio Banderas''1976', 'Masculino', 'The Mask of Zorro, Desperado')]


def searchInDict(searching):
    for obj in dict1:
        searchResult = obj.search(searching)
        if searchResult:
            return searchResult


res = searchInDict("Zorro")
print("Finding Value is '{}': in key '{}'  in peliculas".format(res.peliculas, res.id))

如果您制作另一个以键为名称的字典,然后您可以从该字典中进行查找,这可能是最简单的。例如:

dict2 = {d['Nombre']:d for d in dict1.values()}

print(dict2['Tom Cruise'])

给出:

{'Nombre': 'Tom Cruise', 'Año': '1963', 'Sexo': 'Masculino', 'Peliculas': 'Mission Impossible, Interview with the vampire'}

注意,在本例中,我没有费心从子字典中删除名称本身。您可以通过执行以下操作来实现此目的:

dict2 = {d['Nombre']:d.copy() for d in dict1.values()}
for d in dict2.values():
    del d["Nombre"]

在这里,我们使用子词典的副本(而不是直接引用它们),以避免干扰原始词典

然后您可以执行以下操作,例如:

print(dict2['Tom Cruise'])

给予:

{'Año': '1963', 'Sexo': 'Masculino', 'Peliculas': 'Mission Impossible, Interview with the vampire'}

如果用于查找的键是从用户输入派生的,则可以使用input函数,例如:

name = input('What is the name? ')
print(dict2[name])

相关问题 更多 >