举例说明Python 中dict.keys()方法

653 阅读2分钟

摘要:你可能想得到一个存储在字典中的所有键的列表 。在这种使用情况下,dict.keys() 方法就派上用场了。在这篇文章中,我将展示一些dict.keys() 方法的例子,希望能让你对该方法的工作原理有一个更好的认识。

定义。Python dictionary 内置的dict.keys() 方法输出一个 dictionary 的所有键,其中的键是按照它们被插入的位置排序的。

dict.key() 语法

语法声明

dict.keys()

参数

dict.keys() 不接受任何参数

输出

dict.keys() 方法返回一个视图对象类型的值,显示字典中的所有键,它根据字典状态的突变而变化。

基本例子

一个例子,显示一个代表杂货店清单的字典的所有键。

groceries_dict = {'apples': 6, 'mangos': 3, 'onions': 5,
                  'garlic': 2, 'peaches': 4, 'melons': 3}

print('All the keys in the grocery list: ')
print(groceries_dict.keys())

输出

All the keys in the grocery list: 
dict_keys(['apples', 'mangos', 'onions', 'garlic', 'peaches', 'melons'])

dict.keys() on Empty Dictionary

如果对空字典应用dict.keys() ,返回值是一个带有空列表的dict_keys() 对象,即dict_keys([])

empty_grocery_list = {}
print('grocery list is empty: ')
print(empty_grocery_list.keys())

输出

grocery list is empty: 
dict_keys([])

dict_keys() 对象是否更新?

dict.keys() 方法返回一个关于 dictionary keys 的视图,而不是 keys 的副本。如果你改变了原始的 dictionary,这个视图就会更新,这个变化会被指向 dictionary keys 视图的每个变量看到。

这里有一个例子:

# Create empty dictionary
empty_grocery_list = {}
keys = empty_grocery_list.keys()

print('grocery list is empty: ')
print(keys)

# Update dictionary keys
empty_grocery_list.update({'bananas': 6})
print('updated groceries list keys: ')
print(keys)

输出显示视图已经更新:

grocery list is empty: 
dict_keys([])
updated groceries list keys: 
dict_keys(['bananas'])

如何解决 "TypeError: 'dict_keys' object is not subscriptable" ?

如果你试图从dict.keys() 方法返回的dict_keys() 对象中用方括号符号 [] 访问一个键,Python 将引发一个TypeError: 'dict_keys' object is not subscriptable

groceries_dict = {'apples': 6, 'mangos': 3, 'onions': 5,
                  'garlic': 2, 'peaches': 4, 'melons': 3}

# A failed attempt of trying to access the 3rd grocery item key:
print('3rd grocery item key: ')
print(groceries_dict.keys()[2])

输出:

Traceback (most recent call last):
  File "C:\Users\xcent\Desktop\code.py", line 5, in <module>
    print('3rd grocery item key: ' + groceries_dict.keys()[2])
TypeError: 'dict_keys' object is not subscriptable

你可以解决这个错误,首先使用dict_keys() 对象转换为一个列表对象,使用 [list()](https://blog.finxter.com/python-list/ "Python list() — A Simple Guide with Video")内置方法将 对象转换为 list 对象,然后使用索引访问第 i 个元素。这样做是因为与dict_keys() 对象不同,列表是可下标的。

这里有一个例子:

groceries_dict = {'apples': 6, 'mangos': 3, 'onions': 5,
                  'garlic': 2, 'peaches': 4, 'melons': 3}

# A failed attempt of trying to access the 3rd grocery item key:
print('3rd grocery item key: ')
print(list(groceries_dict.keys())[2])

输出:

3rd grocery item key: 
onions

解决这个错误的一个不太优雅的方法是在字典本身上使用一个简单的 for 循环,像这样。

groceries_dict = {'apples': 6, 'mangos': 3, 'onions': 5,
                  'garlic': 2, 'peaches': 4, 'melons': 3}

# using a for loop to access the 3rd item of the grocery list:
index = 0

for item in groceries_dict:
    if(index == 2):
        print('3rd grocery item key using a for loop:')
        print(item)
    index = index + 1

输出:

3rd grocery item key using a for loop:
onions