Как я могу получить ключ словаря как переменную непосредственно в Python (не путем поиска по значению)?


190

Извините за этот основной вопрос, но мои поиски по этому вопросу не приводят ничего, кроме как получить ключ словаря на основе его значения, которое я предпочел бы не использовать, так как я просто хочу текст / имя ключа и беспокоюсь, что поиск по значению может в итоге вернуть 2 или более ключей, если в словаре много записей ... я пытаюсь сделать следующее:

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

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

Причина этого заключается в том, что я распечатываю их в документе и хочу использовать имя ключа и значение при этом

Я видел метод ниже, но это, кажется, просто возвращает значение ключа

get(key[, default])

Вы просто хотите проверить, что в словаре существует «имя ключа»? Потому что у вас уже есть.
Рет

1
нет, как я уже сказал, нужно распечатать его, он будет перебирать большое количество ключей
Рик

currentэто текущий ключ, просто сделайprint current
Моберг

4
Как бы вы получили только 1-й ключ в словаре? (без итераций)
VISQL

Ответы:


239

Вы должны перебрать ключи с помощью:

for key in mydictionary:
   print "key: %s , value: %s" % (key, mydictionary[key])

10
Вы можете просто написатьfor key in mydictionary:
Blokeley

7
в print (f"key: {key}, value: {mydictionary[key]}")
питоне

94

Если вы хотите напечатать ключ и значение, используйте следующее:

for key, value in my_dict.iteritems():
    print key, value

26
Для Python 3: items () вместо iteritems ()
toshiro92

82

Причина этого заключается в том, что я распечатываю их в документе и хочу использовать имя ключа и значение при этом

Исходя из вышеуказанного требования, я бы предложил следующее:

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

for each in keys:
    print "%s: %s" % (each, mydictionary.get(each))

Я предпочитаю другие ответы, такие как цикл for my_dict.item()или понимание списка, например, keys = list(my_dict.keys)но на тот случай, если кто-то захочет сделать это в Python 3: (строка 2) keys = sorted(my_dict.keys())+ add () для печати.
Honiix

50

Если словарь содержит одну пару, как это:

d = {'age':24}

тогда вы можете получить как

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

Для Python 3.5 сделайте это:

key = list(d.keys())[0]

4
Python3.5:TypeError: 'dict_items' object does not support indexing
Sinux

Довольно хакерский, но d .__ iter __ () .__ next __ () делает свое дело. Вы получаете «возраст». Вы получаете тот же результат с этим d.items () .__ iter __ () .__ next __ () [0].
Йоши

2
В Python3 это работает для одной пары диктов:key = list(d.keys())[0]
Юха Унтинен

Если у вас огромный интерес, next()лучше использовать в соответствии с: stackoverflow.com/a/27638751/1488445
Юха Унтинен

14

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


Пожалуйста, обязательно используйте кодовые теги и объясните свой ответ.
Chrismas007

9

Так просто, как, что:

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

Вы измените свой словарь и должны сначала сделать его копию


8

Вы можете просто использовать, *который распаковывает ключи словаря. Пример:

d = {'x': 1, 'y': 2}
t = (*d,)
print(t) # ('x', 'y')

python34: SyntaxError: может использовать помеченное выражение только как цель назначения
Tcll

черт возьми, я использую python34, потому что я не могу запустить ничего более нового в моей среде тестирования Windows.
Tcll

5

Итерация по словарю (i) вернет ключ, затем, используя его (i), получить значение

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

3

Для Python 3 Если вы хотите получить только ключи, используйте это. Замените print (ключ) на print (значения), если вы хотите значения.

for key,value in my_dict:
  print(key)

3

Иногда я создаю еще один словарь, чтобы иметь возможность использовать все, что мне нужно, для доступа в виде строки. Затем я перебираю несколько словарей, соответствующих ключам, чтобы построить, например, таблицу с первым столбцом в качестве описания.

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

Вы можете легко использовать огромное количество словарей для сопоставления данных (мне нравится тот факт, что в словаре вы всегда можете сослаться на что-то, хорошо известное как имя ключа)

да, я использую словари для хранения результатов функций, поэтому мне не нужно запускать эти функции каждый раз, когда я вызываю их только один раз, а затем получаю доступ к результатам в любое время.

РЕДАКТИРОВАТЬ: в моем примере имя ключа на самом деле не имеет значения (лично мне нравится использовать одни и те же имена ключей, так как легче выбрать одно значение из любого из моих соответствующих словарей), просто убедитесь, что количество ключей в каждом словаре равно тот же самый


0

Вы можете сделать это путем приведения к списку ключей и значений. Это также можно сделать для предметов.

Пример:

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

легко изменить положение ваших ключей и значений, затем использовать значения для получения ключа, в словаре ключи могут иметь одинаковое значение, но они (ключи) должны быть разными. например, если у вас есть список, и первое его значение является ключом к вашей проблеме, а другие значения являются спецификациями первого значения:

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

Вы можете легко сохранять и использовать данные в словаре с помощью этого цикла:

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

тогда вы можете найти ключ (имя) по любому входному значению.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.