python字典和集合详解-6

3.字典

3.1特点

  • 字典是列表以外python中使用最灵活的内置数据类型
  • 字典是一种可变的数据类型
  • 和列表的区别
    • 列表有序,字典无序
    • 列表通过索引访问元素,字典通过键(key)访问元素
  • 字典基本格式
dic={key1:value1,key2:value2,......keyn:valuen}
  • 值可以取任意数据类型,但键不可以,必须为不可变数据类型,即key必须可哈希
  • 补充
    • 可哈希:不可变
    • 不可哈希:可变
  • 特点
    • key:value ,键值对之间用冒号连接
    • key:value,组成字典的一个元素
    • 键值对之间用逗号隔开
    • 整个字典用{}包裹

3.2创建

空字典

>>> dic={}
>>> type(dic)
<class 'dict'>

多元素字典

info = {'id':31901001,'name':'Sheep','sex':'boy'}

>>> dic=dict(id=1001,name='sheep',age=16)
>>> dic
{'id': 1001, 'name': 'sheep', 'age': 16}

强转(zip的使用)

zip()
key=('id','name','age')
value=(1001,'sheep',16)
tp=dict(zip(key,value))
print(tp,type(zip),type(tp))
#{'id': 1001, 'name': 'sheep', 'age': 16} 
#<class 'type'> <class 'dict'>

通过fromkeys方法创建字典

  • 格式
dict.fromkeys(seq,val=None)
  • 创建并返回一个字典
    • 以sep中的元素作为字典的键
    • val的值作为该字典所有键的初始值,不提供默认为None
dic=dict.fromkeys('Tom')
print(dic)
#{'T': None, 'o': None, 'm': None}

dic=dic.fromkeys(['name','sex','age'],33)
print(dic)
#{'name': 33, 'sex': 33, 'age': 33}

3.3常见操作

3.3.1增

  • 直接添加键值对(dic[key]=value)
    • 通过使用变量名[‘键’]=‘值’
      • 如果key不存在,新建键值对[key:value]
      • 如果存在则更新值
dic={}
dic['id'] = 1001
dic['name'] = 'sheep'
dic['age'] = 16
print(dic)
#{'id': 1001, 'name': 'sheep', 'age': 16}

dic['name'] = 'Tom'
print(dic)
#{'id': 1001, 'name': 'Tom', 'age': 16}
  • 例子:简单的添加查询
lis=[{'id':1001,'name':'Tom'},{'id':1002,'name':'Sheep'}]
def sel_name(id):
    id=int(id)
    for i in lis:
        if i['id']==id:
            return i['name']
    return 1;
def add_lis(id,name):
    id=int(id)
    lis.append({'id':id,'name':name})

while True:
    a = input('-----------\n1.添加成员\n2.通过id查找人员\n0.退出并查看\n-----------\n')
    a = int(a)
    if a == 1:
        id = input('请输入添加id:')
        while True:
            if sel_name(id) == 1:
                break
            else:
                print('id已被注册!!!')
                id = input('请重新输入id:')
        name = input('请输入添加姓名:')
        add_lis(id, name)
        print('添加成功')
    elif a == 2:
        id = input('请输入id:')
        if sel_name(id) == 1:
            print("查无可寻")
        else:
            print('name:', sel_name(id))
    elif a == 0:
        print(lis)
        exit()
    else:
        print('输入错误!')
    st=input('按任意键继续!')
  • dic.update(dic)

    把字典dic中的键值对(key:value)更新到dict中

    • 两个字典的键完全不同,则将dic的键值对全部添加到dict中
    • 存在两个相同的键,则更新
    dic={'id':1001,'name':'sheep'}
    dic2={'sex':'boy','name':'tom'}
    dic2.update(dic)
    print(dic2)
    #{'sex': 'boy', 'name': 'sheep', 'id': 1001}
    

3.3.2删

  • dict.pop

    • 格式:dict.pop(key[,default])
      • 如果key存在于dict中,删除并返回dict[key]
      • 如果不存在,给出返回默认值,未给出默认值,报错
    dic2={'sex': 'boy', 'name': 'sheep', 'id': 1001}
    dic2.pop('sex')
    print(dic2)
    #{'name': 'sheep', 'id': 1001}
    dic2.pop('age')
    #报错
    a=dic2.pop('sex')
    print(a)
    #boy
    
  • dict.popitem()

    • 随即删除一对键值对
    • 有返回值的,元组
    dic2={'sex': 'boy', 'id': 1001,'name': 'sheep'}
    a=dic2.popitem()
    print(dic2,a)
    #{'sex': 'boy', 'id': 1001} ('name', 'sheep')
    
  • del dict[]

    删除基

    dic2={'sex': 'boy', 'id': 1001,'name': 'sheep'}
    del dic2['sex']
    print(dic2)
    #{'id': 1001, 'name': 'sheep'}
    
  • dict.clear()

    清空

    dic2={'sex': 'boy', 'id': 1001,'name': 'sheep'}
    dic2.clear()
    print(dic2)
    #{}
    

3.3.3改

  • 直接修改
dic={'sex': 'boy', 'id': 1001,'name': 'sheep'}
dic['id']=1002
print(dic)
#{'sex': 'boy', 'id': 1002, 'name': 'sheep'}
  • dict.setdefault()
    • 建存在,不改动,返回字典中的值
    • 不存在,在字典中添加相应的键值对,并返回对应的值
dic={'sex': 'boy', 'id': 1001,'name': 'sheep'}
print(dic.setdefault('id',999))
print(dic)
print(dic.setdefault('age',16))
print(dic)
###########
1001
{'sex': 'boy', 'id': 1001, 'name': 'sheep'}
16
{'sex': 'boy', 'id': 1001, 'name': 'sheep', 'age': 16}

3.3.4查

  • 字典值的访问
    • 通过字典的key访问value
print(dic['id'])
#存在返回 不存在则报错
  • dict.get()访问value
    • 语法格式 dict.get(key[,default])
    • 不确定字典中是否存在某个键而又想对其操作,比如获取值–>get方法
    • 当key不存在的时候,不会抛出异常,返回None
dic={'sex': 'boy', 'id': 1001,'name': 'sheep'}
print(dic.get('age'))
#None
print(dic.get('age',12))
#12

3.4遍历

  • dict.keys() 返回所有的key
  • dict.values() 返回所有的值
  • dict.items() 返回key和values
dic={'sex': 'boy', 'id': 1001,'name': 'sheep'}
print(dic.keys())
print(dic.values())
print(dic.items())
#dict_keys(['sex', 'id', 'name'])
#dict_values(['boy', 1001, 'sheep'])
#dict_items([('sex', 'boy'), ('id', 1001), ('name', 'sheep')])
for i in dic.items():
    print(i[0],':',i[1])
#sex : boy
#id : 1001
#name : sheep
for i,j in dic.items():
    print(i,':',j)
#结果同上
#举例
li=[22,33,55,66,88,45,95,99,79]
dic={'>=60':[],'<60':[]}
for i in li:
    if i>=60:
        dic['>=60'].append(i)
    else:
        dic['<60'].append(i)
print(dic)

4.集合

set()

4.1特点

  • 无序
  • 不可重复
  • 不可改变
    • 内部元素是可哈希的
    • 集合本身是不可哈希的
  • 用{}括起来的单元素数据集
  • 用途
    • 去重
    • 关系测试

4.2创建

4.2.1空集合的创建

>>> st=set()
>>> st
set()
>>> st={}
>>> type(st)
<class 'dict'>

4.2.2多元素的集合创建

>>> st={1,2,5,6,9}
>>> type(st)
<class 'set'>

4.3强转

>>> li= ['city','cc','aa']
>>> st=set(li)
>>> type(st)
<class 'set'>
>>> st
{'cc', 'city', 'aa'}

>>> s='city'
>>> st=set(s)
>>> st
{'c', 't', 'i', 'y'}

>>> dic={'id':101,'name':'tom'}
>>> st=set(dic)
>>> st
{'id', 'name'}
>>> lu=list(dic)
>>> lu
['id', 'name']

4.4基本操作

4.4.1增

  • set.add()
  • set.update()

4.4.2删

  • set.pop() 删除排序最小的一个元素
  • set.discard() 移除元素不存在,会报错
  • set.remove()
  • del set
>>> li=[1,2,3,4,5,6,'a','b']
>>> s=set(li)
>>> s.pop()
1
>>> s.discard('a')
{2, 3, 4, 5, 6, 'b'}
>>> s.remove(2)
{3, 4, 5, 6, 'b'}

不可改、不可查

4.5遍历

li=['a','b','c',1,2,3]
s=set(li)
for a,b in enumerate(s,0):
    print('(',a,b,')',end=' ')
#( 0 1 ) ( 1 2 ) ( 2 3 ) ( 3 b ) ( 4 a ) ( 5 c ) 

4.6集合基本运算

4.6.1子集

>>> a=set('asd')
>>> b=set('dsa')
>>> a,b
({'d', 'a', 's'}, {'d', 'a', 's'})
>>> a==b
True
>>> a>b
False

4.6.2交集

  • &
  • set.intersection
a=set('accqa')
b=set('gqebgeb')
print(a&b)
#{'q'}
print(a.intersection(b))
#{'q'}

4.6.3并集

  • |
  • set.union()
print(a|b)
#{'q', 'b', 'e', 'g', 'c', 'a'}
print(a.union(b))
#{'q', 'b', 'e', 'g', 'c', 'a'}

4.6.4差集

  • set.diference()
print(a-b)
print(a.difference(b))
#{'c', 'a'}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值