如何在Python中直接将字典键作为变量获取(而不是通过值搜索)?

241

非常抱歉这是一个基础问题,但我的搜索结果只有如何根据字典的值获取其键,而我只想要键的文本/名称,并担心按值搜索可能会返回2个或更多的键,如果字典有很多条目... 我想要做的是这样的:

mydictionary={'keyname':'somevalue'}
for current in mydictionary:

   result = mydictionary.(some_function_to_get_key_name)[current]
   print result
   "keyname"
这是因为我要把它们打印到文档中,并希望在此过程中使用键名和值。我已经看到下面的方法,但这似乎只返回键的值。
get(key[, default])

你只是想检查字典中是否存在“keyname”吗?因为你已经有它了。 - relet
1
不要误解,需要将其打印出来,这将会遍历大量的键。 - Rick
当前current是当前的键,只需执行print current即可。 - Moberg
4
如何只获取字典中的第一个键?(不使用迭代) - VISQL
15个回答

270

你应该使用以下代码来迭代键:

for key in mydictionary:
   print "key: %s , value: %s" % (key, mydictionary[key])

12
你可以只写 for key in mydictionary: - blokeley
13
在Python 3.6中:print(f"key: {key}, value: {mydictionary[key]}") 将会输出键和对应的值。 - JinSnow

122

如果你想同时访问键和值,请使用以下代码:

Python 2:

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

Python 3:

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

32
Python 3 中,请使用 items() 替代 iteritems()。 - toshiro92

87

我这样做的原因是要将它们打印到文档中,并在此过程中使用键名和值。

基于上述要求,我建议采取以下方法:

keys = mydictionary.keys()
keys.sort()

for each in keys:
    print "%s: %s" % (each, mydictionary.get(each))

我更喜欢像 my_dict.items() 上的 for 循环或类似 keys = list(my_dict.keys) 的列表推导式的其他答案,但以防有人想在 Python 3 中执行此操作:(第二行)keys = sorted(my_dict.keys()) + 添加 () 以打印。 - Honiix

79
如果字典中包含一个这样的键值对:

d = {'age':24}

那么你就可以得到如下结果

field, value = d.items()[0]

对于 Python 3.5,执行以下操作:

key = list(d.keys())[0]

10
Python3.5: TypeError: 'dict_items' object does not support indexingPython 3.5:TypeError:'dict_items'对象不支持索引 - Sinux
1
虽然有些hackish,但d.iter().next()可以解决问题。你会得到'age'。使用d.items().iter().next()[0]也可以得到相同的结果。 - yoshi
2
在Python3中,这适用于一对字典:key = list(d.keys())[0] - Juha Untinen
如果你有一个巨大的字典,根据 https://dev59.com/Z2Ml5IYBdhLWcg3wP1HE#27638751,使用 next() 更好。 - Juha Untinen
适用于 Python 3.11。 - Tech

15

keys=[i for i in mydictionary.keys()] 或者 keys = list(mydictionary.keys())

这段代码是用来获取一个字典的所有键,并将其存储在一个列表中。第一行使用了列表推导式,第二行则使用了列表函数。

1
请务必使用代码标签并解释您的答案。 - Chrismas007

11

就是那么简单:

mydictionary={'keyname':'somevalue'}
result = mydictionary.popitem()[0]

你将修改你的字典,因此应该首先制作一份副本。


11
您可以简单地使用* 来解包字典键。例如:
d = {'x': 1, 'y': 2}
t = (*d,)
print(t) # ('x', 'y')

python34:语法错误:只能将星号表达式用作赋值目标 - Tcll
我使用Python34,因为在我的Windows测试环境中无法运行更新的版本。 - Tcll

5

遍历字典(i)将返回键,然后使用它(i)获取值。

for i in D:
    print "key: %s, value: %s" % (i, D[i])

4

对于Python 3,如果你只想获取键,请使用以下代码。如果你想要值而不是键,请将print(key)替换为print(values)。

for key,value in my_dict:
  print(key)

3
我有时会创建另一个字典,只是为了能够将我需要访问的内容作为字符串访问。然后我迭代多个字典,匹配键来构建例如以描述为第一列的表格。
dict_names = {'key1': 'Text 1', 'key2': 'Text 2'}
dict_values = {'key1': 0, 'key2': 1} 

for key, value in dict_names.items():
    print('{0} {1}'.format(dict_names[key], dict_values[key])

您可以轻松地使用大量的字典来匹配数据(我喜欢字典的一点是,您可以始终引用一些众所周知的键名)

是的,我使用字典来存储函数的结果,这样我就不需要每次调用它们时都运行这些函数,只需要运行一次,然后随时访问结果。

编辑:在我的示例中,键名并不重要(我个人喜欢使用相同的键名,因为这样可以更容易地从任何匹配的字典中选取单个值),只需确保每个字典中的键数相同即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接