Подтвердить что ты не робот

Как распечатать ключ словаря?

Я хотел бы напечатать определенный ключ словаря 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 для ссылки на ключ! :)

4b9b3361

Ответ 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.