如何打印字典的密钥?

时间:2011-05-05 22:51:17

标签: python dictionary key

我想打印一个特定的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'来指代密钥! :)

20 个答案:

答案 0 :(得分:308)

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

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

Python 3版本:

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

所以你有一个关键的句柄,但它们只是意味着如果耦合到一个值。我希望我理解你的问题。

答案 1 :(得分:39)

另外你可以使用....

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

答案 2 :(得分:30)

嗯,我认为您可能想要做的是打印所有字典中的键及其各自的值?

如果是这样,您需要以下内容:

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

确保使用+'而不是'。逗号会将每个项目放在一个单独的行上,我认为,加号会将它们放在同一行。

答案 3 :(得分:29)

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

注意:在Python3中,dict.iteritems()被重命名为dict.items()

答案 4 :(得分:25)

密钥的名称' key_name'是key_name,因此print 'key_name'或代表它的任何变量。

答案 5 :(得分: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())

答案 6 :(得分:4)

或者你可以这样做:

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

答案 7 :(得分:3)

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

答案 8 :(得分:2)

使用'key_name'会有什么问题,即使它是变量?

答案 9 :(得分:2)

import pprint
pprint.pprint(mydic.keys())

答案 10 :(得分:2)

# highlighting how to use a named variable within a string:
dict = {'a': 1, 'b': 2}

# simple method:
print "a %(a)s" % dict
print "b %(b)s" % dict

# programmatic method:
for key in dict:
    val = '%('+key+')s'
    print key, val % dict

# yields:
# a 1
# b 2

# using list comprehension
print "\n".join(["%s: %s" % (key, ('%('+key+')s') % dict) for key in dict])

# yields:
# a: 1
# b: 2

答案 11 :(得分:1)

<img src="~/Images/logo.png" runat="server" />

答案 12 :(得分:1)

确保

dictionary.keys()
# rather than
dictionary.keys

答案 13 :(得分:1)

可能是仅检索密钥名称的最快方法:

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

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

结果:

key_name

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

答案 14 :(得分:0)

我查了一下这个问题,因为我想知道如何检索&#34;键的名称&#34;如果我的词典只有一个条目。就我而言,关键是我不知道的,可能是任何数量的东西。以下是我提出的建议:

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

答案 15 :(得分:0)

如果您想获取单个值的密钥,以下内容将有所帮助:

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)

答案 16 :(得分:0)

key_name = '...'
print "the key name is %s and its value is %s"%(key_name, mydic[key_name])

答案 17 :(得分:0)

试试这个:

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

答案 18 :(得分:0)

我要添加此答案,因为这里的其他答案之一(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)

后面的代码天真地更新为iteritems,将items替换为(604, 3936, 0), (1037, 3936, 0

答案 19 :(得分:-1)

要访问数据,您需要执行以下操作:

foo = {
    "foo0": "bar0",
    "foo1": "bar1",
    "foo2": "bar2",
    "foo3": "bar3"
}
for bar in foo:
  print(bar)

或者,要访问该值,只需从以下键中调用即可:foo[bar]