python学习 07基本数据类型之字典类型

本文详细介绍了Python中的字典数据类型,包括字典的定义、索引及常用操作,如添加、删除、修改和查询。此外,还讨论了其他数据类型,如布尔型、比较运算符、成员运算符、布尔运算和逻辑运算,以及None的用法。内容涵盖字典的键值对概念、索引方式、常用方法以及布尔型数据在运算中的规则。
摘要由CSDN通过智能技术生成

一、字典

1.1 字典的定义

字典的由来:
因为集合无序,因此集合中的数据不能很便捷地取出特定的元素,利用集合元素不重复的特性,使集合中的元素映射值组成键值对,再通过键来获取对应的值。
在这里插入图片描述
字典的定义:
python中的字典(dict)数据类型就是键值对的集合,使用一对大括号进行定义,每对键值对之间使用逗号隔开,键和值使用冒号分割。
{key:value, key1:value1,…}
字典的key,本质上是集合,必须是不可变类型,且不会重复。绝大多数情况下,我们使用字符串作为key,而value可以是任意数据类型。

a = {}                      # 空字典
b = {
    1: 2,                   # key:数字;value:数字
    2: 'hello',             # key:数字;value:字符串
    ('k1',): 'v1',          # key:元祖;value:字符串
    'k2': [1, 2, 3],        # key:字符串;value:列表
    'k3': ('a', 'b', 'c'),  # key:字符串;value:元祖
    'k4': {                 # key:字符串;value:字典
        'name': 'feifei',
        'age': '18'
    }
}

print('a的类型为:', type(a))    # a的类型为: <class 'dict'>
print('b的类型为:', type(b))    # b的类型为: <class 'dict'>

python中字典使用dict表示
注意:字典的key本质上是集合,必须是不可变类型,且不会重复,而value可以是任意类型。
例题:
在这里插入图片描述

1.2 字典的索引

字典通过键值对中的键作为索引来获取对应的值,字典中的键是无序的
语法如下
dict[key]

xinlan = {
    'name': '心蓝',
    'age': 18,
    'sex': '男',
    'hobby': ['健身', '阅读'],
    'friends': [
        {
            'name': '刘德华',
            'age': 59,
            'sex': '男'
        },
        {
            'name': '王组贤',
            'age': 58,
            'sex': '女'
        }
    ]
}
print(xinlan['name'])  #   心蓝 表示从字典xinlan中去取key为'name'的值  心蓝
print(xinlan['age'])   #   18   表示从字典xinlan中去取key为'age'的值   18
如果要拿到健身怎么办?
print(xinlan['hobby'][0])  # 健身
# 如果要取到王祖贤应该怎么做?
print(xinlan['friends'][1]['name'])  # 王祖贤
注意:不存在的key会报错

1.3 字典的常用操作

  • 增加一个 直接利用key索引赋值的方式可以添加元素,如果增加的key已存在,则会修改原来的key所对应的值。
xinlan = {'name':'心蓝'}
xinlan['age']=18
print(xinlan)    # {'name': '心蓝', 'age': 18}
  • 增加多个 .update(new_dict),将new_dict合并到字典中
    把一个新字典合并到前面的字典中去。
xinlan = {'name':'心蓝'}
new_dict = {'age':18, 'height':170}
res = xinlan.update(new_dict)
print(xinlan)     # {'name': '心蓝', 'age': 18, 'height': 170}

注意 : 当我们去update的时候有重复的key的时候会覆盖原值(会修改)

  • .pop(key[,d]),删除指定key对应的值,并返回该值,[,d]可写可不写。
xinlan = {'name': '心蓝'}
res = xinlan.pop('name')
print(res)      #  心蓝
print(xinlan)   #  {}

如果不存在这个key则返回d,如果没有给定d,则抛出异常。

xinlan = {'name': '心蓝'}
res = xinlan.pop('age', -1)
print(res)    # -1
print(xinlan)  # {'name': '心蓝'} 

  • popitem(), 按照LIFO(last-in, first-out)后进先出的方式删除dict中的一个键值对,并以二元元组(key, value)的方式返回。
    在这里插入图片描述
xinlan = {'name': '心蓝', 'age':18,'sex':'男'}
res = xinlan.popitem()
print(res)   #  ('sex', '男')
  • clear() 清空字典
xinlan = {'name': '心蓝', 'age':18,'sex':'男'}
res = xinlan.clear()
print(xinlan)     # {}

修改

  • 直接通过key赋值,理解为替换也可以
xinlan = {'name': '心蓝', 'age':18,'sex':'男'}
xinlan['name'] ='xinlan'
print(xinlan)    # {'name': 'xinlan', 'age': 18, 'sex': '男'}
  • 修改多个 .update
xinlan = {'name': '心蓝', 'age':18,'sex':'男'}
new_dict ={'name':123, 'age':456}
xinlan.update(new_dict)
print(xinlan)   #   {'name': 123, 'age': 456, 'sex': '男'}

在key相同的情况下会更新原来key所对应的值
查询

  • 通过key直接获取对应的值
xinlan = {'name': '心蓝', 'age':18,'sex':'男'}
print(xinlan['name'])   # 心蓝
  • .get(key, defaul=None) 获取key对应的值,如果key不存在则返回default,其中 default可以指定
xinlan = {'name': '心蓝', 'age':18,'sex':'男'}
print(xinlan.get('name'))  # 心蓝
print(xinlan.get('height')  # None
print(xinlan.get('height', -1)  #  -1

如果不确定里面是不是有要查找的key,直接用key去寻找可会报错,用get会更安全一些。

  • .keys() 返回字典的所有key(键)
  • .values() 返回字典的所有的value(值)
xinlan = {'name': '心蓝', 'age': 18, 'sex': '男'}
print(xinlan.keys())
print(xinlan.values())
#  dict_keys(['name', 'age', 'sex'])
#  dict_values(['心蓝', 18, '男'])

  • dict.items() 返回字典的键值对
xinlan = {'name': '心蓝', 'age': 18, 'sex': '男'}
print(xinlan.items())
#  dict_items([('name', '心蓝'), ('age', 18), ('sex', '男')])
  • 例题
    在这里插入图片描述
  • 在这里插入图片描述

二、其他数据类型

2.1 布尔型 bool

条件表达式的运算结果返回布尔型(bool),布尔型数据只有两个,True 和 False 表示 真和假 (注意首字母大写)
布尔型是整数的子类
True 1 真
False 0 假

2.2 比较运算符

比较运算符运算后的结果是布尔型
在这里插入图片描述

==
!=
>
<
>=
<=
a = 1
b = 1
print(a==b)  # True
print(a>b)   # False
a = 300
b = 300
a == b  # True
a is b  # False  注意:小整数池的范围是 -5 - 256
c = a
c is a  # True  is 和 == 的区别,面试和笔试经常考
1 != 2  # True

数据和数据做比较都有一定的规则
对于字符串,可以通过unicode进行比较
查看字符编码通过ord(str) ,只接收单个字符

>>> '吴'>'无'
False
>>> ord('吴')
21556
>>> ord('无')
26080
>>>

注意:一定要是相同的才能比较
在这里插入图片描述

2.3 成员运算符

成员运算符用于检查某个对象是否在另外一个对象中。
包含两个运算符 in 、not in

  • x in y : x是否是y的一个元素, 是返回True ,否返回False
  • x not in y : x 是否不是y的一个元素,不是返回True,是返回False
ls = [1, 2, 3]
print(1 in ls)   # True
print(6 in ls)   # False
1 in(1,2,3)  # True
s = ['abcdefg'] #   s是一个列表,这个列表里面只有一个元素就是这个字符串,在外面套了一层,'a'in s  'a'是否是s中的一个元素
'a' in s   ?  # False  如果这样写 s = 'abcdefg'   'a' in s  # True  不会往里面递归地找只会找一层。
st = {1, 2, 3} 
1 in st  # True
'a' not in ls  # True

成员运算符,序列类型(str,list,tuple)、集合、字典都可以用
特别要注意的是:当成员运算符用在字典中时,默认检查的是字典的key。 # 字典检索key很快

print('a' in {'a': 'b'})  #  True   
print('b' in {'a': 'b'})  #  False   # 检查的是字典的key

例题:
在这里插入图片描述

'ac’是连在一起的,相当于一个子串,s里面没有一个’ac’这样子的子串,所以’ac’不在s里面,答案是True.

2.4 布尔型运算

布尔型数据可以和数值类型数据进行数学计算,这时,‘True’表示整数’1’, ‘False’表示整数’0’
布尔型是整数的子类

print(True+1)   # 2
print(False+1)   # 1
print(True+False)  # 1
print(True+1.1)   # 2.1
print(type(True))   #  <class 'bool'>

python中使用bool 表示布尔型

2.5 布尔类型转换

任意数据都可以通过函数bool转换成布尔型

a = 1
print(bool(a))  # True
b = 0 
print(bool(b))  # False

实际上所有的数据都可以通过bool这个内置函数将数据转化为布尔型,也就是说任何数据都可以转换成True或Fasle。
在python中,None, 0(整数), 0.0(浮点数), 0.0+0j(复数), ‘’(空字符串), [] (空列表), ()(空元组), set()(空集合), {} (空字典),的布尔值都是False,其他数值为True。

print(bool(0))
print(bool(0.0))
print(bool(0.0 + 0.0j))
print(bool(''))
print(bool([]))
print(bool(()))
print(bool(set()))
print(bool({}))
print(bool(None))
False
False
False
False
False
False
False
False
False

2.5 逻辑运算

逻辑运算符
逻辑运算符两边的表达式不是布尔型时,在运算前会转换成布尔型。
在这里插入图片描述

  • and 与 基本规则: 两个为都为真才为真
True and True   #  True
True and False  #  False
False and True  #  False
False and False #  Fasle
1 and 2  # 2  会去布尔一下1看它是True还是False,然后再去布尔一下2,看它是True还是False。
# and左边是True的时候,决定整个逻辑运算表达式值应该由右边的值来决定(原因)
# 当and左边为True的时候,整个逻辑运算表达式的结果就是右边的值(结果)
True and 0  #  0
True and '' # ''
这个叫短路,and的左边为False的时候没有必要去算右边
当 and的左边是False的时候
0 and 1  # 0
'' and 'a'  # ''
{} and {'name':'心蓝'  # {}
  • or 或 基本规则 :有一个为真就为真,都为假的时候才为假
True or False  # True
False or True  # True
True or True   #  True
False or False # False
1 or 0  #  1 当左边为True的时候,就没有必要算右边的,直接返回左边的值。
0 or '' #  '' 当左边为False的时候,整个逻辑表达式的结果就是右边的值。 
  • not 取反(not运算符返回的永远是True或者False)
not False  # True
not True   # False
not 0  #  True
note 'a' #  False

逻辑运算符的优先级:not > and >or 
例:
在这里插入图片描述
做这道题,要首先注意:not运算符运算后的结果一定是布尔型。所以 not 1 的结果是 Fasle
然后是 False and 1 and 运算符,两边都是真,结果才为真。所以答案为False。

2.6 None

None是python中的特殊数据类型,它的值就是它本身None,表示空,表示不存在。
print(None) # None 注意首字母大写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值