回过头来再看python之字典的基本操作

字典是一些列的键值对,这些键值对是无序的。

我们可以通过索引来访问,添加,修改甚至删除键值对。


遍历字典

字典中可能包含大量的数据,一般情况下我们这样遍历,假设现在有一个字典叫users

1
2
3
4
users = {'Lily':20, 'Krist':27, 'Eric':40, 'Json':20}
for key, value in users.items():
print("name is "+ key)
print("age is "+ value)

我们还可以遍历字典中的所有的键:

1
2
for name in users.keys():
print(name.title())

字典本身是无序的,所以我们在遍历的时候可以确保获得正确的键值对,但是获取的顺序是不可预测的。

可以使用以下的方法来获得按照特定顺序排列的键值对列表的副本。(列表是有顺序的)

1
2
for name in sorted(users.keys()):
print(name.title())


获取字典中的所有的值?和取所有的键类似,要使用values()函数。但是这里我有一个疑问就是我们是用这个方法获取到的值是什么类型的呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
>>> users = {'001':'lily', '002':'Bob', '008':'Eric','015':'Andrew'}
>>> test_obj = users.keys()
>>> test_obj
dict_keys(['015', '002', '001', '008'])
>>> type(test_obj)
<class 'dict_keys'>
>>> isinstance(test_obj, list)
False
>>> isinstance(test_obj, dict)
False
>>> isinstance(test_obj, tuple)
False
>>> isinstance(test_obj, str)
False
>>> test_obj2 = users.values()
>>> test_obj2
dict_values(['Andrew', 'Bob', 'lily', 'Eric'])
>>> isinstance(test_obj2, list)
False
>>> test_obj3 = sorted(test_obj2)
>>> test_obj3
['Andrew', 'Bob', 'Eric', 'lily']
>>> isinstance(test_obj3, list)
True
>>> for name in test_obj3:
... print(name.title())
...
Andrew
Bob
Eric
Lily
>>> for name in test_obj3:
... names.append(name.title())
...
>>> names
['Andrew', 'Bob', 'Eric', 'Lily']

但是这个对象是可以迭代的。

最后这样先声明一个空的列表,再每次往里面添加元素和直接对这个对象使用sorted()函数得到的结果是一样的,都是一个元素是字符串类型的列表。

我们在获取值的时候可能存在重复的元素,有的时候我们想去掉这些重复的内容,就需要使用方法set(),这个方法将传入的参数转换成集合类型的对象,集合中是没有重复的元素的。

1
2
3
4
5
6
7
8
9
>>> set(test_obj3)
{'Bob', 'Eric', 'Andrew', 'lily'}
>>> test_obj4 = set(test_obj3)
>>> test_obj4
{'Bob', 'Eric', 'Andrew', 'lily'}
>>> type(test_obj4)
<class 'set'>
>>> isinstance(test_obj4,set)
True

当我们想要了解字典中的键值对的个数的时候,可以使用len()方法:

1
2
3
4
>>> users = {'001':'lily', '002':'Bob', '008':'Eric','015':'Andrew'}
>>> nums = len(users)
>>> nums
4

当我们对整个字典使用set()方法的时候,默认的是将字典中所有的键取出来,再转换成一个集合。如果我们想对所有键值对中的值进行去重,那么我们要指定正确的参数:

1
2
3
4
5
6
7
8
>>> set(users)
{'008', '001', '002', '015'}
>>> set(users.keys())
{'008', '001', '002', '015'}
>>> set(users.values())
{'Bob', 'Eric', 'Andrew', 'lily'}
>>> len(set(users))
4


假设存在这样的一种情况:我定义了一个字典,其中有的键值是重复的:

1
2
3
4
5
>>> users = {'001':'lily', '002':'Bob', '001':'Peter'}
>>> users
{'002': 'Bob', '001': 'Peter'}
>>> users['001']
'Peter'

可以看到,这样写并没有报错,只不过后面那个’001’的键将前面的这个’001’的键给覆盖掉了,所以说其实字典里的键值是没有重复的,因为一旦重复,后面的就会将前面的覆盖掉。