Miss me?-----Python 基础数据类型三

一.字典

字典的简单介绍

  字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成.

  在dict中key是 唯⼀的.在保存的时候, 根据key来计算出⼀个内存地址. 然后将key-value保存在这个地址中.

  这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key必须是可hash的, 如果你搞不懂什么是可哈希, 暂时可以这样记,

  可以改变的都是不可哈希的, 那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址⽽规定的.

  已知的可哈希(不可变)的数据类型: int, str, tuple, bool 不可哈希(可变)的数据类型: list, dict, set

  语法:{'key1':1,'key2':2}

  注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据

二.字典的增删改查

增:两种方法
1.dic[键]
2..setdefault()
删:三种方法
1.del 可以删除整个字典,可以通过键删除
2..clear()清空字典
3..pop() 可以指定键删除
4..popitem() 随机删除
改:
1..update() 更新,被更新的内容如果在要更新的内容中那值就会被覆盖;两个字典中,都没有一样的就是合并
2.dic[键]
查:
1..get() 通过键查找,如果不存在,返回None
2..setdefault() 不存在返回None
3.dic[键]

 三.字典的方法

字典
dic = {'剑圣':'易','哈啥给':'剑豪','大宝剑':'盖伦'}
# key_list = dic.keys()
# print(key_list)
'''
结果:
dict_keys(['剑圣', '哈啥给', '大宝剑'])
# 一个高仿列表,存放的都是字典中的key
'''


# value_list = dic.values()
# print(value_list)
'''
结果:
dict_values(['易', '剑豪', '盖伦'])
# 一个高仿列表,存放都是字典中的value
'''


# key_value_list = dic.items()
# print(key_value_list)
'''
结果:
dict_items([('剑圣', '易'), ('哈啥给', '剑豪'), ('大宝剑', '盖伦')])
# 一个高仿列表,存放是多个元祖,元祖中第一个是字典中的键,第二个是字典中的值
'''

# 循环打印字典的键
# for i in dic.keys():
# print(i)
'''
结果:
剑圣
哈啥给
大宝剑
'''


# 循环打印字典的键
# for i in dic.values():
# print(i)
'''
结果:

剑豪
盖伦
'''


# 循环打印元祖形式的键值对
# for i in dic.items():
# print(i)
'''
结果:
('剑圣', '易')
('哈啥给', '剑豪')
('大宝剑', '盖伦')
'''


# 循环字典获取键和值
# for k,v in dic.items():
# print('这是键',k)
# print('这是值',v)
'''
结果:
这是键 剑圣
这是值 易
这是键 哈啥给
这是值 剑豪
这是键 大宝剑
这是值 盖伦
'''

# 补充:
# dic2 = {'33':'gg','66':'pp'}
# ret = dic2.get('99','你傻啊,没有还要拿') #结果:你傻啊,没有还要拿
# # ret = dic2.pop('99','没有') #结果:没有
# print(ret)

# dic3 = dict.fromkeys([1,2,3,4,5,6,7,8,9,0],[1,2,3])
#第一个参数是键 要是可迭代的对象
#第二个参数是值, 值是无所谓 是因为创建的新字典的值用的都是一个 值是一个可变数据类型
# print(dic3) #结果{1: [1, 2, 3], 2: [1, 2, 3], 3: [1, 2, 3], 4: [1, 2, 3], 5: [1, 2, 3], 6: [1, 2, 3], 7: [1, 2, 3], 8: [1, 2, 3], 9: [1, 2, 3], 0: [1, 2, 3]}
# dic3[3].append(9)
# print(dic3) #所有的键都会加上9
# 结果{1: [1, 2, 3, 9], 2: [1, 2, 3, 9], 3: [1, 2, 3, 9], 4: [1, 2, 3, 9], 5: [1, 2, 3, 9], 6: [1, 2, 3, 9], 7: [1, 2, 3, 9], 8: [1, 2, 3, 9], 9: [1, 2, 3, 9], 0: [1, 2, 3, 9]}
四.集合
set集合是python的⼀个基本数据类型. ⼀般不是很常⽤. set中的元素是不重复的.无序的.里面的元素必须是可hash的(int, str, tuple,bool)
增加

s = {"刘嘉玲", '关之琳', "王祖贤"}
s.add("郑裕玲")
print(s)
s.add("郑裕玲") # 重复的内容不会被添加到set集合中
print(s)
s = {"刘嘉玲", '关之琳', "王祖贤"}
s.update("麻花藤") # 迭代更新
print(s)
s.update(["张曼⽟", "李若彤","李若彤"])
print(s)
删除  

s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"}
item = s.pop() # 随机弹出⼀个.
print(s)
print(item)
s.remove("关之琳") # 直接删除元素
# s.remove("⻢⻁疼") # 不存在这个元素. 删除会报错
print(s)
s.clear() # 清空set集合.需要注意的是set集合如果是空的. 打印出来是set() 因为要和
dict区分的.
print(s) # set()
修改

# set集合中的数据没有索引. 也没有办法去定位⼀个元素. 所以没有办法进⾏直接修改.
# 我们可以采⽤先删除后添加的⽅式来完成修改操作
s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"}
# 把刘嘉玲改成赵本⼭
s.remove("刘嘉玲")
s.add("赵本⼭")
print(s)
查询  

# set是⼀个可迭代对象. 所以可以进⾏for循环
for el in s:
print(el)
常⽤操作  

s1 = {"刘能", "赵四", "⽪⻓⼭"}
s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"}
# 交集
# 两个集合中的共有元素
print(s1 & s2) # {'⽪⻓⼭'}
print(s1.intersection(s2)) # {'⽪⻓⼭'}
# 并集
print(s1 | s2) # {'刘科⻓', '冯乡⻓', '赵四', '⽪⻓⼭', '刘能'}
print(s1.union(s2)) # {'刘科⻓', '冯乡⻓', '赵四', '⽪⻓⼭', '刘能'}
# 差集
print(s1 - s2) # {'赵四', '刘能'} 得到第⼀个中单独存在的
print(s1.difference(s2)) # {'赵四', '刘能'}
# 反交集
print(s1 ^ s2) # 两个集合中单独存在的数据 {'冯乡⻓', '刘能', '刘科⻓', '赵四'}
print(s1.symmetric_difference(s2)) # {'冯乡⻓', '刘能', '刘科⻓', '赵四'}
s1 = {"刘能", "赵四"}
s2 = {"刘能", "赵四", "⽪⻓⼭"}
# ⼦集
print(s1 < s2) # set1是set2的⼦集吗? True
print(s1.issubset(s2))
# 超集
print(s1 > s2) # set1是set2的超集吗? False
print(s1.issuperset(s2))

转载于:https://www.cnblogs.com/ww99999/p/10216183.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值