【Python】字典与zip()函数

字典是 无序键不重复且元素只能是键值对的可变的一个容器

怎么理解可变和不可变,简单来说,就是元素是否可以被更改。

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)
如果键重复,则按最后一个键的值为准

二、字典的键值对可变

字典元素添加

# 1) 赋值方法

通过赋值方法可以实现对字典进行新的元素添加

country_total = {"USA": 950, "China": 960, "Russia": 1000}
country_total['Austrilay'] = 600
print(country_total)

# 2)setdefault()

setdefault()方法设置key和其默认值

students = {'name': '张三', 'age': 20}
students.setdefault('sex', '男')
print(students)
也就是给他设置了一个默认值,他会默认给字典加上一个键值对

# 3) fromkeys()

可以从其他可迭代的数据类型中获取对应的值作为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,也就是不存在。

字典元素修改

# 1) 赋值方法

通过赋值方法实现对字典的value值修改

students = {'name': '张三', 'age': 20}
students.setdefault('sex', '男')
print(students)
students['age'] = 21
print(students)

# 2) update方法

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)

字典元素删除

# 1) pop()

pop()方法指定key删除 同时还可以返回被删除的元素

my_dict = {'class': '网络工程', 'name': '李四'}
print(my_dict.pop('class'))
print(my_dict)

# 2) popitem()

popitem()默认删除最后一组k,v对,同时返回k和v组成的元组

my_dict = {'class': '网络工程', 'name': '李四'}
print(my_dict.popitem())
print(my_dict)
my_dict.popitem()
print(my_dict)

# 3) clear()

clear()清空字典

my_dict = {'class': '网络工程', 'name': '李四'}
my_dict.clear()
print(my_dict)

字元素典查看

# 赋值

# 可以通过指定key查看value

students = {'name': '张三', 'age': 20}
print(students['name'])

# get方法

get方法可以指定key查看对应的value值

students = {'name': '张三', 'age': 20}
print(students.get('name'))

# keys()

# 查看所有的keys .keys()方法返回一个dict_keys的一个对象,如果需要生成对应的数据类型,可以进行转化,使用对应的数据类型方法实现

students = {'name': '张三', 'age': 20}
print(list(students.keys()))  #
print(tuple(students.keys()))
print(set(students.keys()))
字典 的 keys 函数获取 字典所有成员的键放在一个 dict_keys 类型的对象中,这个对象是一个可遍历的集合;

# values()

查看所有的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()

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。


各迭代器元素个数一致

a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
zipped = zip(a,b)  # 打包为元组
print(zipped)
但是直接输出的话,会出现<zip object at 0x00000182B52E93C0>,可以给他添加一个遍历,使它正确输出;
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() 转换为列表

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LKsTaRt~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值