哈希表 - 集合(set) 和 字典(dict)

发布时间:2020-06-29 19:46:35 作者:wx5b87e6d52af84
来源:网络 阅读:316

集合

简介
set :set对象是由hashable 对象所组成的无序集合,set对象的每一个元素要求可进行哈希运算,set 会对内部元素进行去重,每个元素在同一个set 中只会出现一次,由于set对象可变性,所以set 对象自身不可哈希。
frozenset : frozenset 对象可以看成一个不可变set对象,是一个可哈希对象,可以最为frozenset、set 的元素或 dict 的 key 。
创建set对象
可哈希对象:在python常见的数据类型中,数值类型,字符串,元组,frozenset,bytes等属于可哈希对象。

# 直接创建
s1 = {1, 2, (1, 4), 'b', 0x23, "\x61"}  # 内部元素为可哈希对象
s2 = set()                                        # 空set,不可使用s = { } 

# set( iter ) # 可迭代对象
s3 = set(range(5))

集合常用方法
frozenset的创建方法和set相同, 其他 共同的方法如下

可以使用set运算直接进行运算,运算方式和数学中集合运算方式相同,例如:

s1 = set(range(10))
s2 = set(range(5,15))
# s1 ==> {0, 1, 2, 3,  4,  5,   6,   7,   8,   9}
# s2 ==> {5, 6, 7, 8,  9, 10, 11, 12, 13, 14}
# 交集
s3 = s1 & s2     #   {5, 6, 7, 8, 9}
# 并集
s3 = s1 | s2      #   {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}
# 差集:从s1 中减去s2 中存在的元素
s5 = s1 - s2     #   {10, 11, 12, 13, 14}
# 子集: 
{1,2,4} <= {1,2,3,4}  # True
# 对称差集: 返回两个集合中不同的元素
s6 = s1 ^ s2     #  {0, 1, 2, 3, 4, 10, 11, 12, 13, 14}

frozenset 和 set 对象的比较是基于内部元素的比较,两个对象之间仍可以进行以上运算,但是运算结果是一个frozenset 对象,而不是set对象;

字典dict

字典可以将一个可哈希值映射到一个任意对象,可以通过映射关系快速查找对应数据;所以在dict中的每一项由一个key-value对组成(也称pairs) ,其中key 会作为字典快速查找的的一个关键数据,所以要求一个字典中键必须是唯一,并可哈希,若在赋值过程中出现相同的key值,后者将会覆盖之前的内容。
创建dict对象

  1. class dict(**kwarg)
  2. class dict(mapping, **kwarg)
  3. class dict(iterable, **kwarg)
# key = value 键值对方式
d1 = dict( a=1,b=2,c=3 )       #   {'a':1, 'b':2, 'c':3}
# mapping 对象创建
d2 = dict(d1, d =4 )               # {'a':1, 'b':2, 'c':3, 'd':4}
# iterable对象,对象中每一个元素必须有两个值分别作为key 和 value
d3 = dicrt([(1,2),(3,4),(5,6)]) # {1:2, 3:4, 5:6}

字典中方法

# 该类实现了collections.defaultdict() 类相同的方法 
class MyDict(dict):
    def __init__(self, seq=list):
        super().__init__
        self.seq = seq

    def __missing__(self, key):
        return self.setdefault(key,self.seq())

mydic = MyDict(set)

for i in "abc":
    mydic[i].add(1)

mydic["c"]          # {1}
mydic               # {'a': {1}, 'b': {1}, 'c': {1}}

update([other]):使用来自 other 的键/值对更新字典,覆盖原有的键。返回 None。

d = {'a':1, 'b':2, 'c':3, 'd':4}
for key in d.keys():
    d.pop(key)                   #  改变字典长度,将会报错

# 解决方案
d = {'a':1, 'b':2, 'c':3, 'd':4}
for key in list(d.keys()):   # 此时将dict视图对象提前遍历生成列表,再对列表进行遍历,不是对视图对象的遍历,将不会报错
    d.pop(key)
推荐阅读:
  1. python中构建字典的方法
  2. python 字典是否有顺序

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

字典 集合 ct

上一篇:下载纯净版windows官方安装版系统

下一篇:ASA防火墙上做基于域名的URL过滤

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》