Skip to content
On this page

字典

1. 字典简介

Python中的字典是一个动态键值对集合,类似于JavaScript的对象或C#当中的HashTable。字典是Python里唯一的映射类型,它存储了键值对的关联,是由键到键值的映射关系。

py
dct1, dct2 = {}, dict()  # 创建空字典的两种方式
person = {"name": "Colin", "age": 18, "married": False}

字典key不能重复,如果key已经存在,则最后的赋值会覆盖之前的value

py
dct = {"name":"Colin","name":"Robin"} # dct = {"name": "Robin"}

字典key必为不可变类型

Python会将字典的key取hash关联内存地址,而value则存储在此内存地址中。如果key为可变类型,key改变之后根据其hash可能无法找到关联的内存地址,也就无法取到对应的value。

py
# key可选类型示例
dct = {1:"int",2.1:"float",True:"bool","string":"str",(1,2):"tuple"}

2. CRUD

2.1 Create

py
person = {"name": "Colin", "age": 18}
person["married"] = False   # {"name": "Colin", "age": 18, "married": False}

p1 = person.copy()  # 复制到字典,非地址引用

2.2 Read

字典元素可以通过key索引器来访问。通过索引访问时,如果key不存在则会抛出异常,而通过get函数获取如果key不存在则返回空而不抛出异常,日常推荐使用get函数安全取值

py
person = {"name": "Colin", "age": 18}
person["age"]                 # 18
person["gender"]              # 异常,key不存在
person.get("name")            # Colin
person.get("gender")          # None
person.get("nation","China")  # China key不存在则使用提供的默认值

2.3 Update

py
person = {"name": "Colin", "age": 18}
person["name"] = "Colin Chang"  # {'name': 'Colin Chang', 'age': 18}

person1 = {"gender":"male"}
person.update(person1)  # 将一个字典合并到当前字典。 此时person为{'name': 'Colin Chang', 'age': 18,"gender":"male"}

2.4 Delete

py
person = {"name": "Colin", "age": 18}
del person["age"]  # {"name": "Colin"}
del person["married"] # 异常。删除不存在的键会抛出异常

person.clear()  # 清空字典

3. 遍历

函数作用
keys获取字典key集合。
values获取字典value集合。
items获取字典键值对集合,每一项是一个元组。

WARNING

以上三个函数在Python3中返回对象,Python2中返回列表。

与javascrip类似,使用for...in遍历字典时,每一项表示的是键值对的key。

py
person = {"name": "Colin", "age": 18}

for key in person:
    print("%s = %s" %(key,person[key]))

for k,v in person.items():
    print("%s = %s" %(k,v))

Released under the MIT License.