python数据类型
字典也是一种python常用的内置数据类型,其他语言一般称之为map,和列表,元组等以连续整数为索引不同,字典以 关键字 为索引,关键字通常是字符串或数字,也可以是其他任意不可变类型。只包含字符串、数字、元组的元组,也可以用作关键字。但如果元组直接或间接地包含了可变对象,就不能用作关键字。列表不能当关键字,因为列表可以被修改,
可以把字典理解为 键值对 的集合,但字典的键必须是唯一的。创建字典
花括号 {} 用于创建空字典。
初始化字典的方式是,在花括号里输入逗号分隔的键值对,这也是字典的输出方式。(推荐)
也可以用dict创建字典(不推荐)info = { "name": "HyRer", "age": 18, "sex": "male" } # dict() 构造函数可以直接用键值对序列创建字典: info = dict( { "name": "HyRer", "age": 18, "sex": "male" } ) info = dict( [ ("name", "HyRer"), ("age", 18), ("sex", "male") ] )常用操作添加键值对info = { "name": "HyRer", "age": 18, "sex": "male" } info["addr"] = "sz" print(info) # {"name": "HyRer", "age": 18, "sex": "male", "addr": "sz"} 获取某个key的值
直接根据key 获取,效率高,但是如果字典中没有这个key会报错info = { "name": "HyRer", "age": 18, "sex": "male" } print(info["name"]) # HyRer print(info["addr"]) # 报错 KeyError: "addr"
get方法获取, 有的话直接返回对应的值,没有的话默认返回None,如果给定默认值则返回默认值info = { "name": "HyRer", "age": 18, "sex": "male" } print(info.get("name")) # HyRer print(info.get("addr")) # None print(info.get("addr", "sz")) # sz更新某个key的值可以直接通过给ky重新赋值更新info = { "name": "HyRer", "age": 18, "sex": "male" } info["age"] = 222 print(info) # {"name": "HyRer", "age": 222, "sex": "male"} update()
update的参数为一个字典, a.update(b),如果b中的key在a中有的话就将a中的key更新为b中key对应的值,没有的话 就在a中新增对应的键值对
有就更新没有就新增info = { "name": "HyRer", "age": 18, "sex": "male" } addr = {"addr": "sz", "name": "tz"} info.update(addr) print(info) # {"name": "tz", "age": 18, "sex": "male", "addr": "sz"} 删除pop()和popitem()
pop:key存在则弹出值,不存在则返回默认值,如果没有默认值则报错
popitem:删除最后一个键值对info = { "name": "HyRer", "age": 18, "sex": "male" } # pop:key存在则弹出值,不存在则返回默认值,如果没有默认值则报错 name = info.pop("name") print(info) # {"age": 18, "sex": "male"} # addr = info.pop("addr") # 报错 KeyError: "addr" addr = info.pop("addr", "sz") print(addr) # sz print(info) # {"age": 18, "sex": "male"} # 删除最后一个键值对 print(info.popitem()) print(info)delinfo = { "name": "HyRer", "age": 18, "sex": "male" } del info["name"] print(info) # {"age": 18, "sex": "male"}获取所有的键keys()info = { "name": "HyRer", "age": 18, "sex": "male" } keys = info.keys() print(keys) # dict_keys(["name", "age", "sex"]) print(list(keys)) # ["name", "age", "sex"]获取所有的值values()info = { "name": "HyRer", "age": 18, "sex": "male" } values = info.values() print(values) # dict_values(["HyRer", 18, "male"]) print(list(values)) # ["HyRer", 18, "male"]获取所有的键值对items()info = { "name": "HyRer", "age": 18, "sex": "male" } items = info.items() print(items) # dict_items([("name", "HyRer"), ("age", 18), ("sex", "male")]) print(list(items)) # [("name", "HyRer"), ("age", 18), ("sex", "male")]字典的for循环info = { "name": "HyRer", "age": 18, "sex": "male" } # k是字典的key for k in info: print(k, info[k]) print(k) # k是字典的key for k in info.keys(): print(k) # val是字典的值 for val in info.values(): print(val) # k是字典的key v是字典的值 for k, v in info.items(): # k,v=("name", "egon") print(k, v) 长度len()
字典中有多少个键值对,长度就是多少info = { "name": "HyRer", "age": 18, "sex": "male" } print(len(info)) # 3判断字典中是否包含某个keyinfo = { "name": "HyRer", "age": 18, "sex": "male" } print("name" in info) # True print("addr" in info) # False setdefault()
不存在则设置默认值,并且返回默认值 ,key存在则不设置默认,并且返回已经有的值info = { "name": "HyRer", "age": 18, "sex": "male" } name = info.setdefault("name", "tz") print(name) # HyRer print(info) # {"name": "HyRer", "age": 18, "sex": "male"} addr = info.setdefault("addr", "sz") print(addr) # sz print(info) # {"name": "HyRer", "age": 18, "sex": "male", "addr": "sz"}