Tenho um dicionário abaixo:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Como faço para indexar a primeira entrada no dicionário?
colors[0]
retornará um KeyError
por motivos óbvios.
Tenho um dicionário abaixo:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Como faço para indexar a primeira entrada no dicionário?
colors[0]
retornará um KeyError
por motivos óbvios.
Respostas:
Os dicionários não são ordenados nas versões do Python até e incluindo o Python 3.6. Se você não se importar com a ordem das entradas e quiser acessar as chaves ou valores por índice de qualquer maneira, poderá usar d.keys()[i]
e d.values()[i]
ou d.items()[i]
. (Observe que esses métodos criam uma lista de todas as chaves, valores ou itens no Python 2.x. Portanto, se você precisar deles mais de uma vez, armazene a lista em uma variável para melhorar o desempenho.)
Se você se preocupa com a ordem das entradas, começando com Python 2.7, você pode usar collections.OrderedDict
. Ou use uma lista de pares
l = [("blue", "5"), ("red", "6"), ("yellow", "8")]
se você não precisa de acesso por chave. (Por que seus números são sequências de caracteres?)
No Python 3.7, os dicionários normais são ordenados, então você não precisa OrderedDict
mais usar (mas você ainda pode - é basicamente o mesmo tipo). A implementação CPython do Python 3.6 já incluiu essa mudança, mas como não faz parte da especificação da linguagem, você não pode confiar nela no Python 3.6.
d.iterkeys().next()
vez de d.keys()[0]
para inspecionar uma das chaves sem removê-la. Se o dicionário for enorme, fará uma grande diferença em termos de desempenho. O mesmo vale para valores e itens. No Python 2.7, você também pode usar objetos de visualização de dict
Se alguém ainda está olhando para esta pergunta, a resposta aceita atualmente está desatualizada:
Como o Python 3.7 * os dicionários preservam a ordem , ou seja, eles agora se comportam exatamente como collections.OrderedDict
costumavam ser. Infelizmente, ainda não há um método dedicado para indexar no keys()
/ values()
do dicionário, portanto, obter a primeira chave / valor no dicionário pode ser feito como
first_key = list(colors)[0]
first_val = list(colors.values())[0]
ou alternativamente (isso evita instanciar a visualização das chaves em uma lista):
def get_first_key(dictionary):
for key in dictionary:
return key
raise IndexError
first_key = get_first_key(colors)
first_val = colors[first_key]
Se você precisar de uma n
chave -th, da mesma forma
def get_nth_key(dictionary, n=0):
if n < 0:
n += len(dictionary)
for i, key in enumerate(dictionary.keys()):
if i == n:
return key
raise IndexError("dictionary index out of range")
(* CPython 3.6 já incluía dicts ordenados, mas este era apenas um detalhe de implementação. A especificação da linguagem inclui dicts ordenados de 3.7 em diante.)
Abordar um elemento do dicionário é como sentar em um burro e aproveitar o passeio.
Como regra do Python, o DICIONÁRIO não tem ordem
Se houver
dic = {1: "a", 2: "aa", 3: "aaa"}
Agora, suponha que se eu gostar dic[10] = "b"
, então não adicionarei assim sempre
dic = {1:"a",2:"aa",3:"aaa",10:"b"}
Pode ser como
dic = {1: "a", 2: "aa", 3: "aaa", 10: "b"}
Ou
dic = {1: "a", 2: "aa", 10: "b", 3: "aaa"}
Ou
dic = {1: "a", 10: "b", 2: "aa", 3: "aaa"}
Ou qualquer combinação desse tipo.
Portanto, a regra geral é DICIONÁRIO não tem ordem !
Se precisar de um dicionário encomendado, você pode usar odict .
Na verdade, encontrei uma solução nova que realmente me ajudou. Se você estiver especialmente preocupado com o índice de um determinado valor em uma lista ou conjunto de dados, pode apenas definir o valor do dicionário para esse Índice !:
Apenas observe:
list = ['a', 'b', 'c']
dictionary = {}
counter = 0
for i in list:
dictionary[i] = counter
counter += 1
print(dictionary) # dictionary = {'a':0, 'b':1, 'c':2}
Agora, com o poder dos hashmaps, você pode obter o índice de suas entradas em tempo constante (também conhecido como muito mais rápido)
oh, essa é difícil. O que você tem aqui, basicamente, são dois valores para cada item. Então você está tentando ligar para eles com um número como chave. Infelizmente, um dos seus valores já está definido como a chave!
Experimente isto:
colors = {1: ["blue", "5"], 2: ["red", "6"], 3: ["yellow", "8"]}
Agora você pode chamar as chaves por número, como se estivessem indexadas como uma lista. Você também pode fazer referência à cor e ao número por sua posição na lista.
Por exemplo,
colors[1][0]
// returns 'blue'
colors[3][1]
// returns '8'
Claro, você terá que descobrir outra maneira de manter o controle da localização de cada cor. Talvez você possa ter outro dicionário que armazene a chave de cada cor como seu valor.
colors_key = {'blue': 1, 'red': 6, 'yllow': 8}
Em seguida, você também poderá pesquisar a chave de cores, se necessário.
colors [colors_key ['blue']] [0] retornará 'blue'
Algo parecido.
E então, enquanto você está nisso, você pode fazer um ditado com os valores numéricos como chaves para que você possa sempre usá-los para pesquisar suas cores, você sabe, se precisar.
valores = {5: [1, 'azul'], 6: [2, 'vermelho'], 8: [3, 'amarelo']}
Então, (cores [cores_chave [valores [5] [1]]] [0]) retornará 'azul'.
Ou você pode usar uma lista de listas.
Boa sorte!
Você não pode, pois dict
não está ordenado. você pode usar .popitem()
para obter um item arbitrário, mas isso o removerá do dicionário.