字典
字典的建立方式:
# 方式一:
dict1 = dict((("one", 1), ("two", 2), ("three", 3)))
print(dict1) # {'one': 1, 'two': 2, 'three': 3}
# 方式二:
dict2 = dict(one = 1, two = 2, three = 3)
print(dict2) # {'one': 1, 'two': 2, 'three': 3}
# 方式三:
dict3 = {"one":1, "two":2, "three":3}
print(dict3)
# 方式四:
dict4 = dict({"one":1, "two":2, "three":3})
print(dict4)
可变、不可变数据类型:
-
可变数据类型:list,dict,set
-
不可变数据类型:int bool str tuple
# 字典的键必须是不可变数据类型
dict5 = {[1,2,3]:12, 1:"lisi"}
print(dict5) # TypeError: unhashable type: 'list'
字典的键必须惟一:
# 字典的键必须惟一 不然后边键的值会把前边同名键的值覆盖掉
dict6 = {1:1, 1:2, 2:3}
print(dict6) # {1: 2, 2: 3}
增
dict7 = {"name":"张三", "age":18}
dict7["sex"] = "男" # 有则改,无则加
dict7["name"] = "李四" # {'name': '李四', 'age': 18, 'sex': '男'}
print(dict7) # {'name': '张三', 'age': 18, 'sex': '男'}
# 设置默认值 setdefault 有则不变,无则增长
dict7.setdefault("hobby") # 不设置值,默认为None
print(dict7) # {'name': '李四', 'age': 18, 'sex': '男', 'hobby': None}
dict7.setdefault("hobby", "球类运动") # 有则不变
print(dict7) # {'name': '李四', 'age': 18, 'sex': '男', 'hobby': None}
删
# pop 根据字典的键删除数据,没有指定的键则报错
dict7.pop("hobby")
print(dict7) # {'name': '李四', 'age': 18, 'sex': '男'}
# 删除不存在的键报错
dict7.pop("hobby")
print(dict7) # KeyError: 'hobby'
ret = dict7.pop("hobby", "没有此键")
print(ret) # 没有此键
# clear 清空
dict7.clear()
print(dict7) # {}
# del
del dict7["name"]
print(dict7)
# 删除不存在键报错
del dict7["name"]
print(dict7) # KeyError: 'name'
改 直接给相应的键赋值
dict8 = {"name":"张三", "age":18}
dict8["name"] = "李四"
print(dict8) # {'name': '李四', 'age': 18}
查
dict8 = {"name":"张三", "age":18}
l1 = dict8.get("name")
print(l1) # 张三
# 想要获取的键不存在,使用get不会报错,默认返回None
l2 = dict8.get("sex")
print(l2) # None
# 指定没有相应键时的返回值
l3 =dict8.get("sex", "没有获取到")
print(l3) # 没有获取到
# keys
keys = dict8.keys()
print(keys) # dict_keys(['name', 'age'])
print(list(keys)) # ['name', 'age']
# 获取字典的key
for key in dict8.keys():
print(key)
# 获取字典的value
for value in dict8.values():
print(value)
for i in dict8.items():
print(i) # 以key,value的形式放在元组中('age', 18)
# 经过元组拆包获取key,value
for key, value in dict8.items():
print(key,value)