键值对

什么是键值对,键值对就是键值一一对应的关系数据。举个简单例子,手机通讯录。名字就是键,手机号码就是值,那它们意义对应起来就是,名字->手机,需要找手机号码,只需要通过名字去寻找就可以。这是一种对简单的键值对。

使用代码来简单模拟下,加深键值对的概念

1
2
3
4
5
6
phoneNumber = {"小明":"13360002000", "小红":"18850003000"}
print(phoneNumber["小明"])
print(phoneNumber["小红"])
------运行结果---------
13360002000
18850003000

小明和小红是键,而他们的手机号码就是值,一一对应,小明的手机号码就是13360002000,小红的就是18850003000,只需要通过名字就是得到他们各自的手机号码。这就是键值对。

字典(dict)

在前面体验键值对的时候,代码里的变量就是字典类型的数据,字典也是可变数据类型,所以具备增删改查的操作。

字典是用{}来表示,在{}里用,来分割配一个键值对,在每个键值对里:左边的是键,:右边的是值,完整的格式是{键1:值1, 键2:值2, ...}注意所有符号都是用英文的。

这里要特别说明的就是键,在python里,键可以是字符串,也可以是整数、小数,还可以是字符串类型或者数字类型的变量。值就不用多说了,任何数据类型都是可以的。

1
2
3
4
5
6
7
name = "小东"
phoneNumber = {"小明":"13360002000", "小红":"18850003000", name:15, 1.0:True}
print(phoneNumber)
print(type(phoneNumber))
------运行结果---------
{'小明': '13360002000', '小红': '18850003000', '小东': 15, 1.0: True}
<class 'dict'>

这里用的是前面的代码,还添加了用变量和数字来做键,运行没有报错,是完全可以的,不过在这里提一下,键值对,最好是用普通的字符串来做键,这是一个习惯和代码格式规范。最后还打印了phoneNumber的数据类型,是个dict,也就是字典。

字典的访问和列表/元组相似,同样用[]来访问,但是不是用下标,而是用键名或者变量。也可以直接使用变量名来访问整个字典。如果前面的知识都有很好的掌握,那么这会很简单。

1
2
3
4
5
6
7
8
9
10
11
name = "小红"
phoneNumber = {"小明":"13360002000", "小红":"18850003000", 1.0:True}
print(phoneNumber["小明"])
print(phoneNumber[1.0])
print(phoneNumber[name])
print(phoneNumber)
------运行结果---------
13360002000
True
18850003000
{'小明': '13360002000', '小红': '18850003000', 1.0: True}

这很简单,没有什么特别的新知识,很快就学会。当然,当你访问一个不存在的键名时,会报错,提示KeyError

1
2
3
4
5
6
7
8
phoneNumber = {"小明":"13360002000", "小红":"18850003000"}
print(phoneNumber["小明"])
print(phoneNumber["小东"])
------运行结果---------
Traceback (most recent call last):
...省略部分
print(phoneNumber["小东"])
KeyError: '小东

出错的提示是KeyError,键错误,描述是小东,说明小东这个键是不存在的。

删除同样和列表/元组一样,只要把下标改成键名即可。

1
2
3
4
5
6
7
8
9
10
11
phoneNumber = {"小明":"13360002000", "小红":"18850003000"}
del phoneNumber["小明"]
print(phoneNumber)
del phoneNumber
print(phoneNumber)
------运行结果---------
{'小红': '18850003000'}
Traceback (most recent call last):
...省略部分
print(phoneNumber)
NameError: name 'phoneNumber' is not defined

这里修改通常是修改字典键的值,而不是键名,键名一旦建立,那么就是没法去修改,这点需要特别注意。如果硬要修改,还是可以做到的。不过这里先不讲解这种内容,放到后面去将。

修改也是一样,将下标换成键名就可以了。

1
2
3
4
5
phoneNumber = {"小明":"13360002000", "小红":"18850003000"}
phoneNumber["小明"] = "12345678900"
print(phoneNumber)
------运行结果---------
{'小明': '12345678900', '小红': '18850003000'}

集合

集合是一种无序不重复的元素序列。和字典非常的像,没有键值对,只有元素。集合是不可变元素。所以只有创建、访问和删除整个集合。

集合的创建和字典一样,也是用{}来创建的。里面的元素可以任意的数据类型。但是当创建一个空元素的时候需要使用set()来创建。

1
2
3
4
5
6
7
8
9
10
11
12
13
name = {"小明","小红","小东","小明"}
print(name)

number = set()
print(number)

print(type(name))
print(type(number))
------运行结果---------
{'小明', '小东', '小红'}
set()
<class 'set'>
<class 'set'>

从运行结果可以发现,集合是个无序的,而且是不重复,即使我们给了重复的数据,但打印输出的结果是不重复的,所以集合往往用来做去重。空集合用set(),输出的也set(),类型依然是集合。

集合的访问比较特殊,不像字典、列表和元组一样可以访问单个元素,集合只能访问整个元素。或者判断某个元素是否存在。

判断某个元素是否存在,用in关键字,左面是元素,右边是数据。in的更多使用细节将会在后面的章节里介绍,这里就不做过多的说明。

1
2
3
4
5
6
7
8
name = {"小明","小红","小东","小明"}
print(name)
print("小红" in name)
print("小磊" in name)
------运行结果---------
{'小红', '小东', '小明'}
True
False

通过del删除集合。

1
2
3
4
5
6
7
8
9
10
name = {"小明","小红","小东","小明"}
print(name)
del name
print(name)
------运行结果---------
{'小红', '小东', '小明'}
Traceback (most recent call last):
...省略部分
print(name)
NameError: name 'name' is not defined