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])

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])

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

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))

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]

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())


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


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')

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])

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)

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


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'

-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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.