Como posso obter a chave do dicionário como variável diretamente no Python (não pesquisando a partir do valor)?

189

Desculpe por esta pergunta básica, mas minhas pesquisas não estão mostrando nada além de como obter a chave de um dicionário com base em seu valor que eu preferiria não usar, pois simplesmente quero o texto / nome da chave e estou preocupado com a pesquisa. por valor pode acabar retornando 2 ou mais chaves se o dicionário tiver muitas entradas ... o que estou tentando fazer é o seguinte:

mydictionary={'keyname':'somevalue'}
for current in mydictionary:

   result = mydictionary.(some_function_to_get_key_name)[current]
   print result
   "keyname"

A razão para isso é que estou imprimindo isso em um documento e quero usar o nome da chave e o valor para fazer isso

Eu vi o método abaixo, mas isso parece retornar apenas o valor da chave

get(key[, default])
Rick
fonte
Deseja apenas verificar se 'keyname' existe no dicionário? Porque você tem.
relet 23/08/10
1
não como eu disse, necessidade de imprimi-lo, seria a iteração através de um grande número de chaves
Rick
currenté a chave atual, basta fazerprint current
Moberg
4
Como você obteria a primeira chave do dicionário? (sem iteração)
VISQL

Respostas:

238

Você deve iterar sobre as chaves com:

for key in mydictionary:
   print "key: %s , value: %s" % (key, mydictionary[key])
systempuntoout
fonte
10
Você pode apenas escreverfor key in mydictionary:
blokeley
7
em python 3.6:print (f"key: {key}, value: {mydictionary[key]}")
JinSnow 24/01
94

Se você deseja imprimir chave e valor, use o seguinte:

for key, value in my_dict.iteritems():
    print key, value
Escualo
fonte
25
Para Python 3: itens () em vez de iteritems ()
toshiro92
82

A razão para isso é que estou imprimindo isso em um documento e quero usar o nome da chave e o valor para fazer isso

Com base no requisito acima, é isso que eu sugeriria:

keys = mydictionary.keys()
keys.sort()

for each in keys:
    print "%s: %s" % (each, mydictionary.get(each))
Manoj Govindan
fonte
Prefiro as outras respostas, como o loop for my_dict.item()ou a compreensão da lista, keys = list(my_dict.keys)mas apenas no caso de alguém querer fazer isso no Python 3: (linha 2) keys = sorted(my_dict.keys())+ add () para imprimir.
Honiix 12/12/19
49

Se o dicionário contiver um par como este:

d = {'age':24}

então você pode obter o máximo

field, value = d.items()[0]

Para Python 3.5, faça o seguinte:

key = list(d.keys())[0]
Sudhin
fonte
4
Python3.5:TypeError: 'dict_items' object does not support indexing
Sinux
Muito hackish, mas d .__ iter __ () .__ next __ () faz o truque. você ganha 'idade'. Você obtém o mesmo resultado com esse item d.items () .__ iter __ () .__ next __ () [0].
yoshi
2
No Python3, isso funciona para um ditado de par:key = list(d.keys())[0]
Juha Untinen
Se você tem um ditado enorme, o uso next()é melhor de acordo com: stackoverflow.com/a/27638751/1488445
Juha Untinen
14

keys=[i for i in mydictionary.keys()] ou keys = list(mydictionary.keys())

kurian
fonte
Certifique-se de usar tags de código e explique sua resposta também.
precisa
9

Tão simples como isso:

mydictionary={'keyname':'somevalue'}
result = mydictionary.popitem()[0]

Você modificará seu dicionário e deverá fazer uma cópia dele primeiro

Libert
fonte
8

Você pode simplesmente usar o *que descompacta as chaves do dicionário. Exemplo:

d = {'x': 1, 'y': 2}
t = (*d,)
print(t) # ('x', 'y')
Georg
fonte
python34: SyntaxError: pode usar a expressão estrelada apenas como destino da atribuição
Tcll
Dang, eu uso python34 porque não consigo executar nada mais novo no meu ambiente de teste do Windows.
Tcll 26/06/19
5

A iteração no dicionário (i) retornará a chave e, em seguida, a utilizará (i) para obter o valor

for i in D:
    print "key: %s, value: %s" % (i, D[i])
splucena
fonte
3

Para python 3 Se você deseja obter apenas as chaves, use isso. Substitua print (key) por print (values), se desejar.

for key,value in my_dict:
  print(key)
Sidarta
fonte
3

O que às vezes faço é criar outro dicionário apenas para poder o que achar necessário para acessar como string. Então eu itero sobre vários dicionários que combinam chaves para criar, por exemplo, uma tabela com a primeira coluna como descrição.

dict_names = {'key1': 'Text 1', 'key2': 'Text 2'}
dict_values = {'key1': 0, 'key2': 1} 

for key, value in dict_names.items():
    print('{0} {1}'.format(dict_names[key], dict_values[key])

Você pode facilmente fazer com que uma enorme quantidade de dicionários corresponda aos dados (eu gosto do fato de que, com o dicionário, você sempre pode se referir a algo conhecido como nome da chave)

sim, eu uso dicionários para armazenar resultados de funções, para que eu não precise executar essas funções toda vez que eu as chamo apenas uma vez e depois acesso os resultados a qualquer momento.

EDIT: no meu exemplo, o nome da chave realmente não importa (eu pessoalmente gosto de usar os mesmos nomes de chave, pois é mais fácil escolher um único valor em qualquer um dos meus dicionários correspondentes), apenas verifique se o número de chaves em cada dicionário é o mesmo

s3icc0
fonte
0

Você pode fazer isso lançando as chaves e valores do dict para listar. Também pode ser feito para itens.

Exemplo:

f = {'one': 'police', 'two': 'oranges', 'three': 'car'}
list(f.keys())[0] = 'one'
list(f.keys())[1] = 'two'

list(f.values())[0] = 'police'
list(f.values())[1] = 'oranges'
lallolu
fonte
-2

altere facilmente a posição de suas chaves e valores e use valores para obter a chave. No dicionário, as chaves podem ter o mesmo valor, mas elas (chaves) devem ser diferentes. por exemplo, se você possui uma lista e o primeiro valor dela é a chave do seu problema e outros valores são as especificações do primeiro valor:

list1=["Name",'ID=13736','Phone:1313','Dep:pyhton']

você pode salvar e usar os dados facilmente no Dicionário por este loop:

data_dict={}
for i in range(1, len(list1)):
     data_dict[list1[i]]=list1[0]
print(data_dict)
{'ID=13736': 'Name', 'Phone:1313': 'Name', 'Dep:pyhton': 'Name'}

então você pode encontrar a base da chave (nome) em qualquer valor de entrada.

mojtaba seyyed shojasadati
fonte