Se a mydict
não estiver vazio, eu acedo a um elemento arbitrário como:
mydict[mydict.keys()[0]]
Existe alguma maneira melhor de fazer isso?
python
dictionary
Stan
fonte
fonte
list(mydict.keys())[0]
.Respostas:
No Python 3, de maneira não destrutiva e iterativa:
No Python 2, de maneira não destrutiva e iterativa:
Se você deseja que ele funcione no Python 2 e 3, você pode usar o
six
pacote:embora neste momento seja bastante enigmático e prefiro seu código.
Se você deseja remover qualquer item, faça:
Observe que "primeiro" pode não ser um termo apropriado aqui, porque
dict
não é um tipo ordenado em Python <3.6. Python 3.6+dicts
são encomendados.fonte
dict.iterkeys().next()
?dict.values().__iter__().__next__()
:)key, value = dict(d).popitem()
Se você precisar acessar apenas um elemento (sendo o primeiro por acaso, já que os dict não garantem a ordem), basta fazer isso no Python 2 :
Observe que (no melhor de meu conhecimento) o Python não garante que duas chamadas sucessivas para qualquer um desses métodos retornem a lista com a mesma ordem. Isso não é suportado no Python3.
no Python 3 :
fonte
list(my_dict.keys())[0]
list(my_dict.keys())[0]
não é preguiçoso?Em python3, o caminho:
retorne um valor no tipo: dict_keys (), obteremos um erro ao obter o 1º membro das chaves do dict dessa maneira:
Finalmente, eu converti dict.keys () para list @ 1st e obtive o 1º membro pelo método de emenda de lista:
fonte
list(dict.values())[0]
.pegar uma chave
para obter um valor
para obter os dois
Os dois primeiros são Python 2 e 3. Os dois últimos são preguiçosos no Python 3, mas não no Python 2.
fonte
Como outros mencionados, não há "primeiro item", pois os dicionários não têm ordem garantida (eles são implementados como tabelas de hash). Se você quiser, por exemplo, o valor correspondente à menor chave,
thedict[min(thedict)]
fará isso. Se você se importa com a ordem em que as chaves foram inseridas, ou seja, por "primeiro" você quer dizer "inserido mais cedo", no Python 3.1 você pode usar coleções.OrderedDict , que também está no Python 2.7; para versões mais antigas do Python, baixe, instale e use o dict backport ordenado (2.4 e posterior) que você pode encontrar aqui .Python 3.7 Agora os ditados são ordenados por inserção.
fonte
Que tal agora. Ainda não mencionado aqui.
py 2 e 3
fonte
dict.values()
retorna uma visualização, então deve ser O (1).list(a)
retorna uma nova lista, assim seria O (n).Ignorando os problemas relacionados à ordenação de ditados, isso pode ser melhor:
Dessa forma, evitamos a pesquisa de itens e geramos uma lista de chaves que não usamos.
Python3
fonte
next(iter(dict.values()))
obter o mesmo resultado sem criar a lista.Em python3
fonte
Você sempre pode fazer:
Isto lhe dará um consistentemente classificada (com respeito ao builtin set .hash () eu acho) de teclas que pode processar em se a ordenação tem algum significado para você. Isso significa que, por exemplo, os tipos numéricos são classificados de forma consistente, mesmo se você expandir o dicionário.
EXEMPLO
Observe que o dicionário é classificado quando impresso. Mas o conjunto de chaves é essencialmente um hashmap!
fonte
Para o Python 2 e 3:
fonte
Is there any better way to do this?
maneira curta.fonte
Nenhuma biblioteca externa funciona em Python 2.7 e 3.x:
Para chave arbitrária, deixe de fora .values ()
fonte
A subclassificação
dict
é um método, embora não seja eficiente. Aqui, se você fornecer um número inteiro, ele retornarád[list(d)[n]]
; caso contrário, acesse o dicionário conforme o esperado:fonte