字典是 无序、键不重复且元素只能是键值对的可变的一个容器。
怎么理解可变和不可变,简单来说,就是元素是否可以被更改。
data = { "k1":1, "k2":2 }
元素必须键值对
键不重复,重复则会被覆盖
data = { "k1":1, "k1":2 }
print(data)
# 空字典的创建
empty_dict = {}
empty_dict1 = dict()
# 字典是无序的
dict1 = {'name': 'abc', 'age': 22}
dict2 = {'age': 22, 'name': 'abc'}
if dict1 == dict2:
print("相等")
# 字典是key是不能重复的,如果有重复的key,取最后的key的值
dict3 = {"name": 'abc', 'age': 22, 'name': 'nebula', 'name': 'nebula1'}
print(dict3)
如果键重复,则按最后一个键的值为准
通过赋值方法可以实现对字典进行新的元素添加
country_total = {"USA": 950, "China": 960, "Russia": 1000}
country_total['Austrilay'] = 600
print(country_total)
setdefault()方法设置key和其默认值
students = {'name': '张三', 'age': 20}
students.setdefault('sex', '男')
print(students)
也就是给他设置了一个默认值,他会默认给字典加上一个键值对
可以从其他可迭代的数据类型中获取对应的值作为key value值只能设置成共同的值
new_dict = {}
my_list = ['name', 'class', 'sex']
print(new_dict.fromkeys(my_list, 'test'))
print(new_dict.fromkeys(my_list))
将列表my_list中的值作为字典new_dict的键,如果加上test,表示所有的键都是样的值;如果不加,键的值为None,也就是不存在。
通过赋值方法实现对字典的value值修改
students = {'name': '张三', 'age': 20}
students.setdefault('sex', '男')
print(students)
students['age'] = 21
print(students)
update方法可以实现从其他字典的k,v更新到现有字典中
students = {'name': '张三', 'age': 20}
my_dict = {'class': '网络工程', 'name': '李四'}
my_dict.update(students)
print(my_dict)
若原字典有而现字典没有,就将原字典有现字典没有的键值对添加到现字典;
students2 = {'class': '电子商务', 'name': '王五'}
my_dict = {'class': '网络工程', 'name': '李四'}
my_dict.update(students2)
print(my_dict)
若原字典有而现字典也有,就将原字典中的键值对更新到现字典中现字典中;
# # 另外,update方法也支持从其他可迭代的数据类型中获取元素进行更新,外层可以是列表或元组,内层必须是两个元素组成的子元组对,这样才可以将其转化为k:v的形式
my_dict = {'class': '网络工程', 'name': '李四'}
my_dict.update([('name', '啦啦啦'), ('age', 22)])
print(my_dict)
pop()方法指定key删除 同时还可以返回被删除的元素
my_dict = {'class': '网络工程', 'name': '李四'}
print(my_dict.pop('class'))
print(my_dict)
popitem()默认删除最后一组k,v对,同时返回k和v组成的元组
my_dict = {'class': '网络工程', 'name': '李四'}
print(my_dict.popitem())
print(my_dict)
my_dict.popitem()
print(my_dict)
clear()清空字典
my_dict = {'class': '网络工程', 'name': '李四'}
my_dict.clear()
print(my_dict)
# 可以通过指定key查看value
students = {'name': '张三', 'age': 20}
print(students['name'])
get方法可以指定key查看对应的value值
students = {'name': '张三', 'age': 20}
print(students.get('name'))
# 查看所有的keys .keys()方法返回一个dict_keys的一个对象,如果需要生成对应的数据类型,可以进行转化,使用对应的数据类型方法实现
students = {'name': '张三', 'age': 20}
print(list(students.keys())) #
print(tuple(students.keys()))
print(set(students.keys()))
字典 的 keys 函数获取 字典所有成员的键放在一个 dict_keys 类型的对象中,这个对象是一个可遍历的集合;
查看所有的vlaues values()方法返回一个dict_values的一个对象,如果需要生成对应的数据类型,可以进行转化,使用对应的数据类型方法实现
students = {'name': '张三', 'age': 20}
print(students.values())
print(list(students.values()))
print(tuple(students.values()))
print(set(students.values()))
可遍历
# items()
查看所有k和v的组成
students = {'name': '张三', 'age': 20}
print(students.items())
可遍历
# 1) 遍历字典,默认遍历的是key,然后可以通过指定key获取value
students = {'name': '张三', 'age': 20}
for item in students:
print(item, students[item])
# 2) 遍历字典,使用items方法,默认返回的是一个dict_items数据类型,里面是一个列表嵌套元组的对象,元组是由两个元素组成
students = {'name': '张三', 'age': 20}
for k, v in students.items():
print(k, v)
# 3) 遍历字典,使用keys方法,遍历出的是所有的key,如果需要获取value,则可以通过指定key去获取
students = {'name': '张三', 'age': 20, 'sex': '男'}
for k in students.keys():
print(k, students[k])
# 4) 遍历字典的value值,不能通过value反向获取key,因为value不唯一
students = {'name': '张三', 'age': 20, 'sex': '男'}
for v in students.values():
print(v)
注意:字典和集合不支持通过下标获取元素,因为它们两个是无序的。
dict1 = {'name': 'china'}
dict2 = {'age': 22}
print({**dict1, **dict2})
将字典的k,v值进行拆解,放入一个新的字典中;
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
各迭代器元素个数一致
a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
zipped = zip(a,b) # 打包为元组
print(zipped)
但是直接输出的话,会出现,可以给他添加一个遍历,使它正确输出;
for i in zipped:
print(i)
各迭代器元素个数不一致
a = [1, 2, 3]
c = [4, 5, 6, 7, 8]
zipped = zip(a, c) # 打包为元组的列表
for i in zipped:
print(i)
转换成列表
a = [1, 2, 3]
c = [4, 5, 6, 7, 8]
zipped = zip(a, c) # 打包为元组的列表
print(list(zipped)) # # list() 转换为列表
转换成字典
a = [1, 2, 3]
c = [4, 5, 6, 7, 8]
zipped = zip(a, c) # 打包为元组的列表
print(dict(zipped)) # # dict() 转换为列表