数据类型详解之字典

本文详细介绍了Python中的字典数据类型,包括字典的定义、操作如增删改查,成员检测,遍历方式,以及相关的内置函数如get、keys、values、items等。同时,讲解了字典推导式及其返回的生成器特性。

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

数据类型详解-字典

字典是一种数据的集合,由键值对组成的数据集合,字典中的键不能重复,但是值可以;

字典是一种映射类型;

字典中的键必须是不可变的数据类型,常用的键主要为:字符串,整型等。

1.字典的定义:【注意使用dict()函数定义时里面的形参命名】

  • 字典可以通过将以逗号分隔的 键: 值 对列表包含于花括号之内来创建字典

  • 也可以通过 dict 构造器来创建

    【使用dict()函数进行定义时,key是字符串不能带引号,这里类似关键字传参】

    【使用dict()函数进行定义时,这里就!是!关键字传参!key=value,此时key是默认参数!】

    【给我回头去复习一下函数基本概念里的形参类型!】

    【同样要注意!如果在函数里取key的值,则key要注意带引号】

    【记不住也没关系,调用函数的时候注意看一下括号里应该带什么样的值就好啦】

    a = dict(b=2,c=2,a123=3)
    a['b']=3        
    print(a.get('b'))
    >>>3
    【如果这里写a[b],a.get(b),就都是错的!】
    
#1.使用{}定义
a = {'a':1,'b':2,'c':1}
【注意,使用{}时候,key如果是字符串则要带引号】

#2.使用dict()函数进行定义
a = dict(a=1,b='b',c='c')
【注意这里是用=号】
【注意!使用dict()定义时,key只能以不带引号的字符开头,不能是数字】
【为什么呢!因为括号里就是函数的形参!!哪有形参是数字或者字符串的!】
a = dict(b=2,1=2,'1'=3) #这样就是错的
>>>SyntaxError: keyword can't be an expression

#3.数据类型的转换:dict(二级容器类型) 列表或元组
b = [['a',1],['b','b']]
print(dict([['a',1],['b','b']]))
>>>{'a': 1, 'b': 'b'}

#4.zip()压缩函数,dict()转类型,类似第3种
a = (1,2,3,4)
b = ['a','b','c','d']
print(dict(zip(a,b)))
>>>{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

2.字典的操作:增删改查

  • 字典没有 + 和 * 操作,这样无法确定key是否重复

  • 获取元素:a=dict[key]

    【注意这里!如果key在字典中不存在,则会报错】

    【用dict.get()函数获取key的value,存在则返回,不存在则默认返回None,在下面字典的相关函数里有详写】

a = {1: 'a', 2: 'b', 3: 'c'}
b = dict(a = 1, b = 2, c = 3)
print(a[2],b['a'])
>>>b 1
  • 修改元素:dict[key]=value

    a[2] = 123
    print(a)
    >>>{1: 'a', 2: 123, 3: 'c'}
    
  • 删除元素:del dict[key]

  • 添加元素:dict[key] = value,如果key重复,则变成了修改

3.成员检测和获取

  • 成员检测:只能检测key,不能检测value

    a in dict
    a not in dict
    
  • 成员获取

    a = {1: 'a', 2: 'b', 3: 'c'}
    # 获取当前字典的长度,即键值对的个数
    res = len(a)
    >>>3
    # 获取当前字典中的所有 key 键,返回列表
    res = a.keys()
    >>>dict_keys([1, 2, 3])
    # 获取字典中所有的 value 值,返回列表
    res = a.values()
    >>>dict_values(['a', 'b', 'c'])
    # 获取当前字典中所有 键值对,返回列表
    res = a.items()
    >>>dict_items([(1, 'a'), (2, 'b'), (3, 'c')])
    

4.字典的遍历

a = {1: 'a', 2: 'b', 3: 'c'}
# 1.在遍历当前的字典时,只能获取当前的key
for i in a:
    print(i) # 只能获取 key
    print(a[i]) # 通过字典的key获取对应value

# 2.遍历字典时,使用 items() 函数,可以在遍历中获取key和value
for k,v in a.items():
    print(k,v)  

# 3. 遍历字典的所有key,和直接遍历字典的结果是一样的
for k in a.keys():
    print(k)

# 4. 遍历字典所有的value
for i in a.values():
    print(i)

5.字典的相关函数

  • len(dict)

  • dict.keys()

  • dict.values()

  • dict.items()

  • str(dict):把字典转为字符串,字典的{为字符串的第一个元素

  • dict.fromkeys(seq[,value]):

    #创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值,不指定value则默认为None
    i = ('a','b',1)
    b = dict.fromkeys(i,10)
    print(b)
    >>>{'a': 10, 'b': 10, 1: 10}
    
  • iter(dict):返回以字典的键为元素的迭代器

  • dict.pop(key[,default]):获取key的value,并删除键为key的字典对

    如果key不存在则返回default,default未给出则报错

    a = {1: 'a', 2: 'b', 3: 'c'}
    b = a.pop(2)
    print(a)
    print(b)
    >>>{1: 'a', 3: 'c'}
       b
        
    b = a.pop(4,'abc')
    print(b)
    >>>abc
    
  • dict.popitem():移除并返回一个键值对,键值对按照LIFO的顺序被返回成元组

    LIFO: Last in, First out.后进先出,是栈

    a = {1: 'a', 2: 'b', 3: 'c'}
    b = a.popitem()
    print(a)
    print(b)
    >>>{1: 'a', 2: 'b'}
       (3, 'c')
    
  • dict.get(key[,k]):【注意和上面a=dict[key]的不同】

    #a=dict[key]:如果key在字典中不存在,则会报错
    #用dict.get()函数获取key的value,存在则返回,不存在则默认返回None,也可以自己设定返回的k值
    a = {1: 'a', 2: 'b', 3: 'c'}
    b = a.get(123,'abc')
    print(b)
    >>>abc
    
  • dict.update():【接收的是一个字典对象!】更新字典,如果key存在,则更新其value,key不存在则添加【类似修改操作,只不过dict[key]=value的修改方法一次只能改一个,update()可以多个。如果括号里为空,则返回None。】

    【注意括号里的字典对象,key不能是以数字开头的,因为key是函数的形参啊割割!!!】

    a = dict(b=2,c=2,a123=3)
    a.update(b=1)        #可以直接放key=value
    a.update(dict(a123='a'))  #也可以放dict()函数
    a.update({1:'a','c':456})  #也可以放{},注意这里的c是字符串,必须带引号
    print(a)
    >>>{'b': 1, 'c': 456, 'a123': 'a', 1: 'a'}
    
  • dict.setdefault(key[,default]):如果key存在,则返回它的值,key不存在则添加值为default的键key,并返回default

    【注意一下setdefault和update的区别】

    a = dict(b=2,c=2,a123=3)
    print(a.setdefault(1,123))  #注意这里就可以令key为1
    print(a.setdefault('b',456))
    print(a)
    >>>123
       2
       {'b': 2, 'c': 2, 'a123': 3, 1: 123}
    

6.字典推导式:返回的也是生成器

#把字典的键值反过来
【注意这里,第一次写就出了bug】
a = {'a': 1, 'b': 2, 'c': 3}
for i,j in a.items():
    a[j] = i
print(a)
【看出来问题在哪儿了吗!不能在原字典上直接修改!需要有个缓存来存新字典哇!之前写列表啥的都记得要设置个空列表,怎么这里就忘了】

a = {'a': 1, 'b': 2, 'c': 3}
b = {}
for i,j in a.items():     #也可以用for i in a.keys()做
    b[j] = i
print(b)
>>>{1: 'a', 2: 'b', 3: 'c'}

#用推导式:注意大括号的位置!!
a = {'a': 1, 'b': 2, 'c': 3}
print({j:i}for i,j in a.items())
#还是要注意一下和上面b[j]=i的区别,第一次写就在{}里也写成了a[j]=i
>>><generator object <genexpr> at 0x0000026804E54CC8>
【诶,这里是个生成器】
【那就和元组推导式一样了】
【不不不是因为大括号的位置问题!!!】
print({j:i for i,j in a.items()})
#不取键值对只取键
print({a[i]:i for i in a.keys()})
>>>{1: 'a', 2: 'b', 3: 'c'}

#以下推导式返回的是集合
a = {'a': 1, 'b': 2, 'c': 3}
b = {j for i,j in a.items()}
print(b)
>>>{1, 2, 3}    #是个集合
【注意!取的值是有序集合,如果取的是key,集合是无序的】
b = {i for i,j in a.items()}
print(b)
>>>{'a', 'c', 'b'}
print(b)
>>>{'b', 'a', 'c'}
#对dict里的value求平方
#普通方法
a = {'a': 1, 'b': 2, 'c': 3}
for i in a.keys():
    a[i] **= 2
print(a)

#推导式
b = {i:a[i]**2 for i in a.keys()}
print(b)
>>>{'a': 1, 'b': 4, 'c': 9}
#把字典中的是偶数的值,保留下来,并且交换键值对的位置
a = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
b = {}
for i in a.keys():
    if a[i] % 2 == 0:
        b[a[i]] = i
print(b)

#用推导式
b = {a[i]:i for i in a.keys() if a[i] % 2 == 0}
print(b)

#当然也可以用for i,j in a.items()来做
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值