Eu estou tentando acessar o elemento de um dict_key pelo seu índice:
test = {'foo': 'bar', 'hello': 'world'}
keys = test.keys() # dict_keys object
keys.index(0)
AttributeError: 'dict_keys' object has no attribute 'index'
Eu quero pegar foo
.
mesmo com:
keys[0]
TypeError: 'dict_keys' object does not support indexing
Como posso fazer isso?
python
dictionary
python-3.x
key
fj123x
fonte
fonte
dict.keys()
retorna um conjunto como objeto de visualização, não lista (portanto, a indexação não é possível). Usekeys = list(test)
collections.OrderedDict
Se você quiser chaves ordenadas)Respostas:
Invoque
list()
o dicionário:No Python 3, o
dict.keys()
método retorna um objeto de exibição de dicionário , que atua como um conjunto. A iteração direta sobre o dicionário também produz chaves, portanto, transformar um dicionário em uma lista resulta em uma lista de todas as chaves:fonte
dict
subclasse, por exemplo, onde.keys()
é tratado no código Python (por exemplo, uma troca de thread pode ocorrer).sorted(dict)
faria exatamente a mesma coisa; produz uma lista de chaves em ordem classificada.list(dict)
fornecerá a lista em ordem de dicionário.keys = [*test]
Não é uma resposta completa, mas talvez uma dica útil. Se é realmente o primeiro item que você deseja *, então
é muito mais rápido que
para ditados grandes, já que a coisa toda não precisa ser armazenada na memória.
Para 10.000.000 itens, achei quase 40.000 vezes mais rápido.
* O primeiro item no caso de um dict ser apenas um item pseudo-aleatório antes do Python 3.6 (depois disso, é ordenado na implementação padrão, embora não seja aconselhável confiar nele).
fonte
Eu queria o par "chave" e "valor" de um primeiro item do dicionário. Eu usei o seguinte código.
fonte
Maneira convencional de anexar as chaves a uma lista definida estaticamente e depois indexá-la pela mesma
fonte
ls = list(test.keys())
? Eu acho isso mais simples.Em muitos casos, isso pode ser um problema XY . Por que você está indexando as chaves do seu dicionário por posição? Você realmente precisa? Até recentemente, os dicionários nem sequer eram ordenados em Python, portanto, acessar o primeiro elemento era arbitrário.
Acabei de traduzir um código Python 2 para Python 3:
o que não é bonito, mas também não é muito ruim. No começo, eu estava prestes a substituí-lo pela monstruosa
antes que eu percebesse isso tudo é muito melhor escrito como
o que funciona muito bem.
Acredito que em muitos outros casos, a indexação das chaves do dicionário por posição pode ser evitada. Embora os dicionários sejam ordenados no Python 3.7, confiar nisso não é bonito. O código acima funciona apenas porque o conteúdo de
some_list
foi produzido recentemente a partir do conteúdo ded
.Dê uma olhada no seu código, se você realmente precisar acessar um
disk_keys
elemento pelo índice. Talvez você não precise.fonte
Tente isto
O resultado é assim. ['foo', 'olá']
Você pode encontrar mais soluções possíveis aqui .
fonte