Как распечатать ключ словаря?
Я хотел бы напечатать определенный ключ словаря Python:
mydic = {}
mydic['key_name'] = 'value_name'
Теперь я могу проверить, если mydic.has_key('key_name')
, но то, что я хотел бы сделать, это напечатать имя ключа 'key_name'
. Конечно, я мог бы использовать mydic.items()
, но я не хочу, чтобы все ключи были указаны, только один конкретный ключ. Например, я ожидал что-то вроде этого (в псевдокоде):
print "the key name is", mydic['key_name'].name_the_key(), "and its value is", mydic['key_name']
Есть ли метод name_the_key()
для печати имени ключа?
Редактировать: ОК, большое спасибо, ребята, за ваши реакции! :) Я понимаю, что мой вопрос не очень хорошо сформулирован и тривиален. Я просто запутался, потому что понял, что key_name и mydic['key_name']
- две разные вещи, и я подумал, что было бы неправильно печатать key_name
из контекста словаря. Но на самом деле я могу просто использовать key_name для ссылки на ключ! :)
Ответы
Ответ 1
Словарь имеет, по определению, произвольное количество ключей. Нет "ключа". У вас есть метод keys()
, который дает вам python list
всех ключей, и у вас есть метод iteritems()
, который возвращает пары ключ-значение, поэтому
for key, value in mydic.iteritems() :
print key, value
Версия Python 3:
for key, value in mydic.items() :
print (key, value)
Таким образом, у вас есть дескриптор ключей, но они действительно означают смысл, если они связаны со значением. Надеюсь, я понял ваш вопрос.
Ответ 2
Кроме того, вы можете использовать....
print(dictionary.items()) #prints keys and values
print(dictionary.keys()) #prints keys
print(dictionary.values()) #prints values
Ответ 3
Хм, я думаю, что вам может потребоваться распечатать все ключи в словаре и их соответствующие значения?
Если это так, вы хотите следующее:
for key in mydic:
print "the key name is" + key + "and its value is" + mydic[key]
Убедитесь, что вы используете + вместо. '. Думаю, запятая поместит каждый из этих элементов в отдельную строку, где плюс добавит их в одну строку.
Ответ 4
dic = {"key 1":"value 1","key b":"value b"}
#print the keys:
for key in dic:
print key
#print the values:
for value in dic.itervalues():
print value
#print key and values
for key, value in dic.iteritems():
print key, value
Примечание: в Python 3 dic.iteritems() был переименован в dic.items()
Ответ 5
Имя ключа "key_name" - это ключевое имя, поэтому print 'key_name'
или любая переменная, которую вы его представляете.
Ответ 6
Поскольку мы все пытаемся угадать, что может означать "напечатать ключевое имя", я возьму на него удар. Возможно, вам нужна функция, которая принимает значение из словаря и находит соответствующий ключ? Обратный поиск?
def key_for_value(d, value):
"""Return a key in `d` having a value of `value`."""
for k, v in d.iteritems():
if v == value:
return k
Обратите внимание, что многие ключи могут иметь одно и то же значение, поэтому эта функция вернет некоторый ключ, имеющий значение, возможно, не тот, который вы намеревались.
Если вам нужно делать это часто, было бы целесообразно построить обратный словарь:
d_rev = dict(v,k for k,v in d.iteritems())
Ответ 7
Или вы можете сделать это так:
for key in my_dict:
print key, my_dict[key]
Ответ 8
# highlighting how to use a named variable within a string:
mapping = {'a': 1, 'b': 2}
# simple method:
print(f'a: {mapping["a"]}')
print(f'b: {mapping["b"]}')
# programmatic method:
for key, value in mapping.items():
print(f'{key}: {value}')
# yields:
# a 1
# b 2
# using list comprehension
print('\n'.join(f'{key}: {value}' for key, value in dict.items()))
# yields:
# a: 1
# b: 2
Редактировать: Обновлено для Python 3 f-строк...
Ответ 9
В Python 3:
# A simple dictionary
x = {'X':"yes", 'Y':"no", 'Z':"ok"}
# To print a specific key (for example key at index 1)
print([key for key in x.keys()][1])
# To print a specific value (for example value at index 1)
print([value for value in x.values()][1])
# To print a pair of a key with its value (for example pair at index 2)
print(([key for key in x.keys()][2], [value for value in x.values()][2]))
# To print a key and a different value (for example key at index 0 and value at index 1)
print(([key for key in x.keys()][0], [value for value in x.values()][1]))
# To print all keys and values concatenated together
print(''.join(str(key) + '' + str(value) for key, value in x.items()))
# To print all keys and values separated by commas
print(', '.join(str(key) + ', ' + str(value) for key, value in x.items()))
# To print all pairs of (key, value) one at a time
for e in range(len(x)):
print(([key for key in x.keys()][e], [value for value in x.values()][e]))
# To print all pairs (key, value) in a tuple
print(tuple(([key for key in x.keys()][i], [value for value in x.values()][i]) for i in range(len(x))))
Ответ 10
Неправильно использовать 'key_name'
, даже если это переменная?
Ответ 11
import pprint
pprint.pprint(mydic.keys())
Ответ 12
Не забудьте сделать
dictionary.keys()
# rather than
dictionary.keys
Ответ 13
dict = {'name' : 'Fred', 'age' : 100, 'employed' : True }
# Choose key to print (could be a user input)
x = 'name'
if x in dict.keys():
print(x)
Ответ 14
Вероятно, самый быстрый способ получить только имя ключа:
mydic = {}
mydic['key_name'] = 'value_name'
print mydic.items()[0][0]
Результат:
key_name
Преобразует dictionary
в list
, затем он перечисляет первый элемент, который является целым dict
, затем он перечисляет первое значение этого элемента: key_name
Ответ 15
Попробуйте следующее:
def name_the_key(dict, key):
return key, dict[key]
mydict = {'key1':1, 'key2':2, 'key3':3}
key_name, value = name_the_key(mydict, 'key2')
print 'KEY NAME: %s' % key_name
print 'KEY VALUE: %s' % value
Ответ 16
key_name = '...'
print "the key name is %s and its value is %s"%(key_name, mydic[key_name])
Ответ 17
Если вы хотите получить ключ от одного значения, следующее:
def get_key(b): # the value is passed to the function
for k, v in mydic.items():
if v.lower() == b.lower():
return k
В pythonic образом:
c = next((x for x, y in mydic.items() if y.lower() == b.lower()), \
"Enter a valid 'Value'")
print(c)
Ответ 18
Я поднял этот вопрос, потому что хотел узнать, как получить имя "ключ", если в моем словаре есть только одна запись. В моем случае ключ был неизвестен мне и мог быть любым количеством вещей. Вот что я придумал:
dict1 = {'random_word': [1,2,3]}
key_name = str([key for key in dict1]).strip("'[]'")
print(key_name) # equal to 'random_word', type: string.
Ответ 19
Я добавляю этот ответ как один из других ответов здесь (fooobar.com/info/51223/...), датированный (Python 2; iteritems
), и представленный код - если обновляется для Python 3 согласно Предлагаемый обходной путь в комментарии к этому ответу - молча не удается вернуть все соответствующие данные.
Фон
У меня есть некоторые метаболические данные, представленные в графе (узлы, ребра,...). В словарном представлении этих данных ключи имеют форму (604, 1037, 0)
(представляющие исходный и целевой узлы и тип ребра) со значениями формы 5.3.1.9
(представляющими коды фермента ЕС).
Найти ключи для заданных значений
Следующий код правильно находит мои ключи с заданными значениями:
def k4v_edited(my_dict, value):
values_list = []
for k, v in my_dict.items():
if v == value:
values_list.append(k)
return values_list
print(k4v_edited(edge_attributes, '5.3.1.9'))
## [(604, 1037, 0), (604, 3936, 0), (1037, 3936, 0)]
тогда как этот код возвращает только первый (из нескольких возможных) ключей:
def k4v(my_dict, value):
for k, v in my_dict.items():
if v == value:
return k
print(k4v(edge_attributes, '5.3.1.9'))
## (604, 1037, 0)
Последний код, наивно обновленный и заменяющий iteritems
items
, не может быть возвращен (604, 3936, 0), (1037, 3936, 0
.