如何打印字典的键?


213

我想打印一个特定的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”来引用密钥!:)


19
如果您知道想要的特定密钥,那么,您已经知道密钥是什么。
Wooble

Answers:


381

根据定义,字典具有任意数量的键。没有“钥匙”。您有keys()方法,可以为您提供list所有键的python ,并且您有iteritems()方法,可以返回键-值对,因此

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

Python 3版本:

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

因此,您在键上有一个手柄,但是如果将其与值耦合,它们实际上仅意味着意义。我希望我理解你的问题。


1
尽管这在Python 2.7中对我来说效果很好,但是Py3k的替代方案是什么?我知道.iteritems()已不再受支持...
Piperchester

5
@PolyShell是python 3中的替代方法,如果这就是Py3k的意思(我已经离开python一段时间了).items()。我加了一个例子。
juanchopanza

1
@Bibhas两者都起作用,但是语义不同。items()返回python 2.x中的列表。
juanchopanza 2014年

72

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

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

谢谢!这正是我一直在寻找的东西:)
Masoud Maleki

34

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

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

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

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


2
逗号会将它们放在同一行,但在"is"key等之间插入空格。如果使用+,则需要在字符串中放入多余的填充。同样,key和value不一定是字符串,在这种情况下,逗号将使用str(key)和str(value)而+会导致错误
John La Rooy

1
这是我所知不正确的一个答案,因为操作员说:“我不想列出所有键。”
Ned Batchelder

由于某种原因,我对逗号不以为然。你是正确的。我还重新阅读了这个问题,看来我们俩都以粗体显示了“全部”,这很糟糕。
多米尼克·桑托斯

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


25

因此,键“ key_name”的名称为key_name,print 'key_name'或者是您代表它的任何变量。


10

在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

由于我们都在尝试猜测“打印键名”的含义,因此我将对其进行介绍。也许您想要一个从字典中获取一个值并找到相应键的函数?反向查询?

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

注意(如上所述),迭代项在Python 3中变成了简单的“项目”。
迈克

注意:如果更改iteritemsitems,则如最初所示,此答案将仅返回第一个键-如果有多个匹配项。要解决此问题,请在for loopvalues_list = [])之前创建一个空白列表,然后将键附加到此列表(values_list.append(k)if循环中将)。最后,将return语句(return values_list)移到for循环外。
维多利亚·斯图尔特


4
# 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字符串...


3

确保做

dictionary.keys()
# rather than
dictionary.keys

2

'key_name'即使使用变量,使用它又有什么问题呢?



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

1

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

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

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

结果:

key_name

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


为什么还要检索值?
马丁·彼得斯

1

我查询了这个问题,因为如果我的字典只有一个条目,我想知道如何检索“键”的名称。就我而言,密钥对我来说并不为人所知,可以是任何东西。这是我想出的:

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

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

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

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)

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)

后者的代码天真地更新iteritemsitems,无法返回(604, 3936, 0), (1037, 3936, 0


0

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.