HOWTO · Python
Como obter a primeira chave em um dicionário Python
Aprenda a obter a primeira chave produzida por um iterador de dicionário Python com next(), conversão para lista, um loop for e um valor padrão seguro para dicionários vazios.
Nesta página
Para obter a primeira chave produzida por um dicionário Python, chame next(iter(my_dict)). Isso lê uma chave diretamente do iterador do dicionário. Neste exemplo, o dicionário contém um nome e uma cidade, e o programa imprime a primeira chave produzida:
my_dict = {"name": "Ada", "city": "London"}
first_key = next(iter(my_dict))
print(first_key)
O que “primeira” significa em um dicionário
Um dicionário não fornece indexação numérica para chaves. Aqui, “primeira” significa a primeira chave produzida quando o Python itera sobre o dicionário. Para um dicionário ordenado, a iteração segue sua ordem de inserção, portanto, a primeira chave é a inserida mais cedo. Se um mapeamento usa uma ordem de iteração diferente, “primeira” segue o comportamento de iteração desse mapeamento. Essa definição descreve o resultado da iteração; ela não presume que cada mapeamento ordena suas chaves da mesma maneira.
A iteração de dicionário produz chaves por padrão. Portanto, você pode passar o dicionário diretamente para iter() ou para um loop for. Não é necessário chamar keys() primeiro. O método my_dict.keys() retorna uma exibição dinâmica das chaves quando você precisa inspecionar ou reutilizar essa exibição separadamente.
Obter a primeira chave com next()
Use iter() para criar um iterador sobre o dicionário e, em seguida, next() para recuperar seu próximo item. Como um iterador de dicionário produz chaves, essa abordagem lê uma chave sem construir uma lista separada de todas as chaves. Para um dicionário não vazio, é a escolha concisa quando você precisa de apenas uma chave:
my_dict = {"name": "Ada", "city": "London"}
first_key = next(iter(my_dict))
print(first_key)
O valor de first_key é a primeira chave produzida pela iteração. next() também aceita um valor padrão opcional, que é útil quando o dicionário pode não ter chaves. A seção final mostra essa forma.
Obter a primeira chave com list()
Se você também precisa das chaves como uma lista, converta o dicionário em uma lista e selecione o índice 0. Um dicionário passado para list() produz suas chaves, portanto, não há necessidade de chamar keys() primeiro:
my_dict = {"name": "Ada", "city": "London"}
first_key = list(my_dict)[0]
print(first_key)
Essa conversão materializa cada chave antes de selecionar uma. Use a abordagem do iterador quando você precisa de apenas uma única chave. A conversão para lista é útil quando a lista resultante também será indexada, fatiada ou usada em outra operação de lista. O índice 0 exige que a lista contenha uma chave, portanto, essa forma não é adequada quando o dicionário pode estar vazio, a menos que você verifique antes.
Obter a primeira chave com um loop for
Um loop for itera diretamente sobre as chaves do dicionário. Atribua a primeira chave e, em seguida, use break para parar após essa iteração:
my_dict = {"name": "Ada", "city": "London"}
for key in my_dict:
first_key = key
break
print(first_key)
Essa abordagem se encaixa em código que já usa um loop ou que precisa executar uma operação com a chave antes de parar. Ela evita converter todas as chaves em uma lista. O loop não precisa de items() quando o valor não é usado. Se o dicionário não contiver chaves, o corpo do loop nunca é executado, portanto, o código que usa first_key depois deve levar em conta essa possibilidade.
Lidar com um dicionário vazio
Chamar next(iter(my_dict)) quando o dicionário não tem chaves gera StopIteration. Passe um segundo argumento para next() para retornar um substituto:
my_dict = {}
first_key = next(iter(my_dict), None)
print(first_key)
Aqui, None é o substituto. Escolha um valor padrão que não possa ser confundido com uma chave de dicionário válida. Se None puder ser uma chave nos seus dados, crie um objeto sentinela exclusivo e use-o como valor padrão:
my_dict = {"name": "Ada", "city": "London"}
sentinel = object()
first_key = next(iter(my_dict), sentinel)
if first_key is sentinel:
print("No keys")
else:
print(first_key)
A abordagem de lista com list(my_dict)[0] não tem argumento padrão e gera IndexError quando não há chaves. Use next(iter(my_dict), default) quando um substituto embutido torna o comportamento de entrada vazia mais fácil de lidar.