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.
python
dictionary
indexing
Harpal
fonte
fonte
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]
ed.values()[i]
oud.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 paresse 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.fonte
d.iterkeys().next()
vez ded.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 dictSe 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 nokeys()
/values()
do dicionário, portanto, obter a primeira chave / valor no dicionário pode ser feito comoou alternativamente (isso evita instanciar a visualização das chaves em uma lista):
Se você precisar de uma
n
chave -th, da mesma forma(* 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.)
fonte
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
Agora, suponha que se eu gostar
dic[10] = "b"
, então não adicionarei assim semprePode ser como
Ou
Ou
Ou qualquer combinação desse tipo.
Portanto, a regra geral é DICIONÁRIO não tem ordem !
fonte
Se precisar de um dicionário encomendado, você pode usar odict .
fonte
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:
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)
fonte
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:
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,
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.
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.
Então, (cores [cores_chave [valores [5] [1]]] [0]) retornará 'azul'.
Ou você pode usar uma lista de listas.
Boa sorte!
fonte
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.fonte
next(iter(d.items()))
(.iteritems()
no Python 2) também fornece um item arbitrário (o mesmo em meus testes, o que faz sentido, já que popitem pode ser implementado usando isso), mas não remove o item.