python元组和字典

256 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天

元组(tuple)

定义

与列表相似,不同之处在于元组不可修改并且使用的是()定义

t = ('a')
print(type(t))
>>> <class 'str'>
t = ('a',)
print(type(t))
>>> <class 'tuple'>
t = ('a','b')
print(type(t))
>>> <class 'tuple'>

注意:如果含有一个元素就必须得加“ ,”

下标和切片同样适用

计算次数和查找

  • count():计算元组内有多少个相同元素
t = (1,2,3,4,3,2,4,3,5,3)
print(t.count(2))
>>> 2
  • index():查找元组内部的指定元素
t = (1,2,3,4,5,4,3,5,6,7)
a = t.index(3)
print(a)

注意;与上面的index相同,从左往右只能找到第一个指定元素,index的(元素,start,end)左闭右开

判断以及元组和列表的转换

  • in ,not in:判断元素是否在元组中
a = ('a','b','c','d')
if 'c' in a :
	print(c)
else :
	print('不存在')
  • 因为元组不可修改,所以我们可以吧元组转换成列表来进行处理
t1 = [1,2,3,4,5,6]
t2 = (1,2,3,4,5,6)
tuple = tuple(t1)
list = list(t2)

字典(dict)

定义

使用{}进行字典的定义,{}内部采用键值对的形式进行值得记录(直接定义即可)

  • 元素得键是唯一的,值是可以重复的
  • 没有下标可切片操作

添加元素

字典名[key] = 值:可以通过这种方式来进行元素得添加(添加时是接着往后直接添加)

a = {'name':'mzmm403','age':'18'}
a['name'] = 'lichuang'
print(a)
>>> {'name': 'lichuang', 'age': '18'}
a['agender'] = 'man'
print(a)
>>> {'name': 'lichuang', 'age': '18', 'agender': 'man'}

注意:也可以以这种方式进行元素得修改即若原字典中已有该键已有对应得值,那么通过此操作可以替换原来的那个值

  • setdefault():直接在字典末尾添加元素(只能添加使用)
a = {'name':'mzmm403','age':'18'}
a.setdefault('agender','man')
print(a)

删除

  • clear:直接清空整个列表
  • pop:pop(key)因为key是唯一的,所以根据可以来删除元素,删除的是键值对,有返回值(键值对中的值)
books = {'书名':'三体','作者':'刘慈欣','出版日期':'xxxx.xx.xx'}
print(books.pop('出版日期'))
print(books)
>>> xxxx.xx.xx
>>> {'书名': '三体', '作者': '刘慈欣'}
  • popitem:从最后一组键值对开始删除,返回值是元组(元组内包含了删除的键与值(key,value))
books = {'书名':'三体','作者':'刘慈欣','出版日期':'xxxx.xx.xx'}
print(books.popitem())
print(books)
>>> ('出版日期', 'xxxx.xx.xx')
>>> {'书名': '三体', '作者': '刘慈欣'}
  • del:类似于pop(del book['书名'])(但注意这里是彻底删除,连book这个字典也删除了)

便利和查询

  • 查询
  1. get:根据key获得value值
  2. 直接获取
books = {'书名':'三体','作者':'刘慈欣','出版日期':'xxxx.xx.xx'}
value = books.get('书名')
print(value)
value1 = books['书名']
print(value1)
>>> 三体
>>> 三体

那么上述二种获取的方法有什么区别呢?

books = {'书名':'三体','作者':'刘慈欣','出版日期':'xxxx.xx.xx'}
value = books.get('价格')
value1 = books['价格']
print(value)
print(value1)
>>> None
>>> Traceback (most recent call last):
>>>   File ".\txt.py", line 3, in <module>
>>>     value1 = books['价格']
>>>  KeyError: '价格'

正如上述结果所示:前者在遇到key值不存在时不会报错只会返回none值,但后者则会报错

除此之外get还有一个好处可以在其后面更改默认值(初始默认值就是none,如果找不到你也可以改成其他的值)这个功能非常好用

  • 遍历:和列表的便利方式类似,都是使用for.....in.....来进行便利
books = {'书名':'三体','作者':'刘慈欣','出版日期':'xxxx.xx.xx'}
for v in books
>>>>>  这个时候你会返现你遍历出来的时key值,所以我们得进行一些细微的改动
for v in books.values():
	print(v)
>>> 三体
>>> 刘慈欣
>>> xxxx.xx.xx

注意:这里的books.values()你直接获取其值会得的一个python自己封装的一个数据类型dict_values(['三体', '刘慈欣', 'xxxx.xx.xx'])

类似的你也可以使用books.keys()也可以获取字典当中所有的key

以上我么都是将键值分开拿,那么怎么能一对一对的哪呢?

  • items:与keys以及values类似,items是项,而这里的一堆键值对为一项
books = {'书名':'三体','作者':'刘慈欣','出版日期':'xxxx.xx.xx'}
or v in books.items():
	print(v)
    
#结果
('书名', '三体')
('作者', '刘慈欣')
('出版日期', 'xxxx.xx.xx')

结果是以一个个元组的形式将键值对取出

这里有一个非常实用的小技巧(交叉赋值的原理)我们可以采用这种赋值方式来进行结果输出

books = {'书名':'三体','作者':'刘慈欣','出版日期':'xxxx.xx.xx'}
or k,v in books.items():
	print(k,v)
#结果
书名 三体
作者 刘慈欣
出版日期 xxxx.xx.xx

这样我们就能把结果的值直接拿出来

合并字典

  • update():可以简单的理解为将两个字典合并
books = {'书名':'三体','作者':'刘慈欣','出版日期':'xxxx.xx.xx'}
a = {'name':'mzmm403','age':'18'}
books.update(a)
print(books)
>>> {'书名': '三体', '作者': '刘慈欣', '出版日期': 'xxxx.xx.xx', 'name': 'mzmm403', 'age': '18'}

注意:在这里我们不能简单的将两个字典做‘+’进行合并

创建新的字典(fromkeys)

result = dict.fromkeys(['a','b'],10) #这里是创建一个新的字典,中括号内为键,后面只能是一个数据作为整体赋值给前面的多个键
print(result)
>>> {'a': 10, 'b': 10}