如何打印字典的键?

我想打印一个特定的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'来引用键!:) < / p >

1176760 次浏览

因此,键'key_name'的名称是'key_name'

print('key_name')

或者用其他变量表示。

使用'key_name'代替有什么问题,即使它是一个变量?

嗯,我认为你可能想要做的是打印所有字典中的键和它们各自的值?

如果是这样,你想要以下:

for key in mydic:
print "the key name is" + key + "and its value is" + mydic[key]

确保你使用+'而不是,'。逗号会把每一项放在单独的一行上,而加号会把它们放在同一行上。

根据定义,字典有任意数量的键。没有“钥匙”。你有keys()方法,它给你所有键的python list,你有iteritems()方法,它返回键-值对,所以

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

Python 3版本:

for key, value in mydic.items() :
print (key, value)

所以你可以处理键,但它们只有在与值耦合时才有意义。我希望我已经理解了你的问题。

试试这个:

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

既然我们都在试着猜“打印一个键名”;可能意味着,我会试一试。也许您想要一个从字典中获取值并找到相应键的函数?反向查找?

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

为Python3更新: d.iteritems()在Python 3+中不再被支持,应该被d.items()取代

d_rev = {v: k for k, v in d.items()}
import pprint
pprint.pprint(mydic.keys())
key_name = '...'
print "the key name is %s and its value is %s"%(key_name, mydic[key_name])
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()

# 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-strings更新…

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)

或者你可以这样做:

for key in my_dict:
print key, my_dict[key]

如果你想获取单个值的键,下面的方法会有帮助:

def get_key(b): # the value is passed to the function
for k, v in mydic.items():
if v.lower() == b.lower():
return k

以python的方式:

c = next((x for x, y in mydic.items() if y.lower() == b.lower()), \
"Enter a valid 'Value'")
print(c)

可能是只检索键名的最快方法:

mydic = {}
mydic['key_name'] = 'value_name'


print mydic.items()[0][0]

结果:

key_name

dictionary转换为list,然后列出第一个元素,即整个dict,然后列出该元素的第一个值,即key_name

我查阅了这个问题,因为我想知道如果我的字典只有一个条目,如何检索“键”的名称。在我的例子中,我不知道钥匙是什么,它可能是任何东西。以下是我想到的:

dict1 = {'random_word': [1,2,3]}
key_name = str([key for key in dict1]).strip("'[]'")
print(key_name)  # equal to 'random_word', type: string.

此外,您还可以使用....

print(dictionary.items()) #prints keys and values
print(dictionary.keys()) #prints keys
print(dictionary.values()) #prints values

一定要做到

dictionary.keys()

而不是

dictionary.keys

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

我添加这个答案,因为这里的其他答案之一(https://stackoverflow.com/a/5905752/1904943)是过时的(Python 2;iteritems),并且给出的代码——如果根据该答案的注释中建议的解决方案为Python 3更新——无声地无法返回所有相关数据。


背景

我有一些代谢数据,用图表示(节点,边,…)在这些数据的字典表示中,的形式为(604, 1037, 0)(表示源和目标节点,以及边缘类型),而的形式为5.3.1.9(表示EC酶代码)。

找到给定值的键

下面的代码正确地找到我的键,给定值:

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)


后一个代码被天真地更新,用items替换了iteritems,无法返回(604, 3936, 0), (1037, 3936, 0