python中的字典与集合

本文详细介绍了Python中字典和集合的特点、创建方式及常用操作。包括字典的键值对概念、集合的去重功能等,并通过实例演示了如何在实际编程中运用这些数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python中的字典与集合

字典(dic())

key : value —>键值对

字典是列表以外Python中使用最灵活的内置数据类型。

字典是一种可变的数据类型。

和列表的区别:

  • 列表有序,字典无序
  • 列表通过索引(偏移)访问元素,字典通过键(key)访问元素

字典的基本格式:

dic = {key1: value1,key2: value2,...,keyn: valuen}

值可以取任意数据类型,但键不可以,必须为不可变数据类型,即key必须可哈希。

可哈希—>不可变

不可哈希—>可变

特点:
  • key : value,键值之间用冒号( : )连接
  • key : value 组成字典的一个元素
  • 键值对之间用逗号( , )隔开
  • 整个字典用花括号( { } )包裹
字典的创建
空字典

dic = {}

创建多元素字典
info = {'id': '20190101', 'name:': 'Tom', 'age': '18'}
print(info['id'])

#输出结果:20190101

注意:字典是无序的,只能通过key来搜寻

info = {'id': '20190101', 'name:': 'Tom', 'age': '18'}
print(info)

dic = dict(id=20190101, name='Tom', age=18)
print(dic)

key1, key2, key3 = 'id', 'name', 'age'
value1, value2, value3 = 20190101, 'Tom', 18
dic = {key1: value1, key2: value2, key3: value3}
print(dic)

print(dict((('id', 20190101), ('name', 'Tom'), ('age', 18))))

#输出结果都为:{'id': 20190101, 'name': 'Tom', 'age': 18}
强转:
zip()
key = ('id', 'name', 'age')
value = (20190101, 'Tom', 18)
tp = tuple(zip(key, value))
print(tp, type(tp))

#输出结果:(('id', 20190101), ('name', 'Tom'), ('age', 18)) <class 'tuple'>

通过字典的fromkeys方法创建字典

格式:

dict.fromkeys(seq,val = None)

  • 创建并返回一个字典
    • 以seq中的元素作为该字典的键
    • val的值作为该字典中所有键对应的初始值;如不提供,默认为None。
dic = dict.fromkeys(['Tom', 'Jack','Lucy'],666)
print(dic)

#输出结果:{'Tom': 666, 'Jack': 666, 'Lucy': 666}

fromkeys只期待两个元素,所以姓名那些用列表表示,所有人的密码都为666

字典的常见操作
  • 直接添加键值对(dic[key] = value)

    • 通过使用变量名[“键”] = “值”,
      • 如果key不存在,新建键值对(key : value)
      • 如果存在,则更新值(value)
    li = []
    while 1:
        dic = {}
        id = int(input('请输入id:'))
        name = input('请输入name:')
        age = int(input('请输入age:'))
        dic['id'] = id
        dic['name'] = name
        dic['age'] = age
        li.append(dic)
        i = input("请问是否继续y/n(不区分大小写):")
        if i.lower() == 'n':
            break
    
    print(li)
    
    '''
    输出结果:
    请输入id:20190101
    请输入name:Tom
    请输入age:19
    请问是否继续y/n:y
    请输入id:20190102
    请输入name:Kate
    请输入age:18
    请问是否继续y/n:n
    [{'id': 20190101, 'name': 'Tom', 'age': 19}, {'id': 20190102, 'name': 'Kate', 'age': 18}]
    '''
    
  • dict.update(dic)

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

    • 两个字典的键完全不同,则将dic的键值对全部添加至dict中
    • 存在相同的键,则更新dict中对应的值
    dic = {'job': 'IT', 'hobby': 'Read'}
    dic2 = {'name': 'Jake', 'hobby': 'Game'}
    dict = {'id': 20190101, 'name': 'Tom', 'age': 20}
    dict2 = {'id': 20190101, 'name': 'Tom', 'age': 20}
    dict.update(dic)
    dict2.update(dic2)
    print(dict)
    print(dict2)
    
    #输出结果:
    #{'id': 20190101, 'name': 'Tom', 'age': 20, 'job': 'IT', 'hobby': 'Read'}
    #{'id': 20190101, 'name': 'Jake', 'age': 20, 'hobby': 'Game'}
    
  • dict.pop()

    • 格式:

      dict.pop(key[.default])

      • 如果key存在于dict中,删除并返回dict[key]
      • 如果不存在,给出默认值则返回默认值,来给出默认值,报错
    dict = {'id': 20190101, 'name': 'Tom', 'age': 20}
    print(dict.pop('job', 'it'))
    print(dict.pop('age', 23))
    print(dict)
    
    #it
    #20
    #{'id': 20190101, 'name': 'Tom'}
    
  • dict.popitem()

    • 随机删除一对键值对

    • 有返回值,元组

      dict = {'id': 20190101, 'name': 'Tom', 'age': 20}
      print(dict.popitem())
      key, value = dict.popitem()
      print(dict)
      print(key, value)
      
      #('age', 20)
      #{'id': 20190101}
      #name Tom
      
  • del dict(key) ;del dict() ; dict.clear()

    dict = {'id': 20190101, 'name': 'Tom', 'age': 20}
    del dict['age']
    print(dict)
    del dict
    print(dict)
    
    dict1 = {'id': 20190101, 'name': 'Tom', 'age': 20}
    print(dict1.clear())
    print(dict1)
    
    #{'id': 20190101, 'name': 'Tom'}
    #<class 'dict'>
    #None
    #{}
    
  • 直接改

    dic = {'id': 20190101, 'name': 'Tom', 'age': 20}
    dic['id'] = 20190102
    print(dic)
    
    #{'id': 20190102, 'name': 'Tom', 'age': 20}
    
  • dict.setdefault()

    • 键存在,不改动,返回字典中的值
    • 不存在,在字典中添加相应的键值对,并返回相应的值
    dic = {'id': 20190101, 'name': 'Tom', 'age': 20}
    print(dic.setdefault('name', 'Jack'))  # 键存在
    print(dic.setdefault('job', 'IT'))  # 键不存在
    print(dic)
    
    #Tom
    #IT
    #{'id': 20190101, 'name': 'Tom', 'age': 20, 'job': 'IT'}
    
  • 字典值的访问

    • 直接通过字典的key访问value
    dic = {'id': 20190101, 'name': 'Tom', 'age': 20}
    print(dic['id'])
    print(dic['job'])
    
    #20190101(存在返回对应的值)
    #报错(如果访问不存在的值会报错)
    
  • dict.get()访问value

    • 语法格式:dict.get(key[, defualt])
    • 不确定字典中是否存在某一个键而邮箱对其进行操作,比如获取值—>get方法
    • 当key不存在的时候,不会抛出异常,返回None
    dic = {'id': 20190101, 'name': 'Tom', 'age': 20}
    print(dic.get('id'20190102))
    print(dic.get('job'))
    print('salary', 1200)
    print(dic)
    
    #20190101
    #None
    #salary 1200
    #{'id': 20190101, 'name': 'Tom', 'age': 20}
    
  • 遍历

    • dict.keys()
    • dict.values()
    • dict.items()
    dic = {'id': 20190101, 'name': 'Tom', 'age': 20}
    print(dic.keys(), type(dic.keys()))
    
    #dict_keys(['id', 'name', 'age']) <class 'dict_keys'>
    
    dic = {'id': 20190101, 'name': 'Tom', 'age': 20}
    for key in dic.keys():
        print(key, end=' ')
    
    #id name age (value同)
    
    dic = {'id': 20190101, 'name': 'Tom', 'age': 20}
    for item in dic.items():
        print(item, end=' ')
        
    #('id', 20190101) ('name', 'Tom') ('age', 20)   
    
    dic = {'id': 20190101, 'name': 'Tom', 'age': 20}
    for key, value in dic.items():
        print(key, ':', value)
        
    #id : 20190101
    #name : Tom
    #age : 20    
    

    例题:将下列数字按大于小于60进行分类

    li = [23, 24, 45, 67, 43, 69, 74, 98]
    dic = {}
    li1 = []
    li2 = []
    for i in li:
    if i >= 60:
      li1.append(i)
    else:
      li2.append(i)
    dic['>=60'] = li1
    dic['<60'] = li2
    print(dic)
    
    #{'>=60': [67, 69, 74, 98], '<60': [23, 24, 45, 43]}
    

集合(set())

特点:
  • 无序
  • 不可重复
  • 不可更改
    • 内部的元素是可哈希的(不可变的)
    • 集合本身是不可哈希的(可变的)
  • 用{}括起来的单元素数据集
用途:
  • 去重(列表—>集合,自动去重)
  • 关系测试
集合的创建:
空集合的创建:

st = set()

st = set()
st1 = {}
print(type(st))
print(type(st1))

#<class 'set'>
#<class 'dict'>
多元素集合的创建:
st = {1, 2, 3, 4}
print(st)
print(type(st))

#{1, 2, 3, 4}
#<class 'set'>
单元素元组的创建:
st = {1}
print(st)
print(type(st))

#{1}
#<class 'set'>
强转:
li = ['City', 'college', 'zhejiang']
st = set(li)
print(st, type(st))

#{'college', 'City', 'zhejiang'} <class 'set'>

sr = 'city'
st = set(sr)
print(st)

#{'y', 'c', 'i', 't'}(无序的)

dic = {'id': 20190101, 'name': 'Tom', 'age': 20}
st = set(dic)
print(st)

#{'name', 'id', 'age'}(只要键而无视value)
集合的基本操作:
  • set.add()
  • set.update()
  • set.pop() (删除排序中最小的一个元素)

  • set.discard() (移除元素,不存在,不会报错)

  • set.remove() (移除元素,不存在,会报错)

  • del set

    st = {"a", "ab", "c", 1}
    st.pop()
    print(st)
    
    #{'a', 'ab', 'c'}
    

不可改

不可查

遍历
st = {"City", "college", "zhejiang"}
for i in st:
    print(i, end=' ')
    
#City college zhejiang 

st = {"City", "college", "zhejiang"}
for i in enumerate(st):
    print(i, end=' ')
    
#(0, 'college') (1, 'City') (2, 'zhejiang')     
集合的基本运算:
子集
a = set("abc")
b = set("cdef")
c = set("ab")
print(a, b, c)
print(c < a)
print(c.issubset(a))
print(c < b)

#{'b', 'c', 'a'} {'d', 'f', 'c', 'e'} {'b', 'a'}
#True
#True
#False
交集
  • &

  • set.intersection()

    a = set("abc")
    b = set("cdef")
    c = set("ab")
    print(a & b)
    print(a.intersection(b))
    
    #{'c'}
    #{'c'}
    
并集
  • |

  • set.union()

    a = set("abc")
    b = set("cdef")
    c = set("ab")
    print(a | b)
    
    #{'b', 'f', 'e', 'c', 'd', 'a'}
    
差集
  • set.diffrence()

    a = set("abc")
    b = set("cdef")
    c = set("ab")
    print(a - b)
    
    #{'a', 'b'}
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值