【Python基础入门系列】7、Python数据结构-元组和字典

640?wx_fmt=gif

一、元组的基本使用

序列:计算机中有序的排列数据的一种数据结构。可变不可变两种。不可变序列,没有添加、删改等方法。

列表和元组的原则:

一般,希望数据不改变时用元组,其他情况都用列表。

创建元组

用()创建元组。

my_tuple = (1,2,3,4,5)
print(my_tuple)
print(type(my_tuple))

输出

(1, 2, 3, 4, 5)
<class 'tuple'>

访问元素

用tuple[index]

my_tuple = (1,2,3,4,5)
print(my_tuple[3])

输出

4

给元素赋值会报错

my_tuple = (1,2,3,4,5)
my_tuple[3] = 6
print(my_tuple)

报错,TypeError: 'tuple' object does not support item assignment

my_tuple = 1,
print(my_tuple)

打印

(1,)

可以分别访问元素并赋值,即元组的解包,解包指的是将元组每一个元都赋值给一个变量。

tpl = (1,2,3,4,5)
a,b,c,d,e = tpl
print(f'a={a}\nb={b}\nc={c}\nd={d}\ne={e}')

输出

a=1
b=2
c=3
d=4
e=5

解包的运用:

a = 1
b = 2
a,b = b,a
print(f'a={a}\nb={b}')

打印

a=2
b=1

在对元素解包时,必须要变量的个数与元组的长度一致,会报错;

tpl = (1,2,3,4,5)
a,b = tpl
print(f'a={a}\nb={b}')

会报错,ValueError: too many values to unpack (expected 2),这样变量将会获取元组中剩余的元素,并且只能加一个,不能加多个*;

tpl = (1,2,3,4,5)
a,b,*c = tpl
print(f'a={a}\nb={b}\nc={c}')

打印

a=1
b=2
c=[3, 4, 5]

又如,

tpl = (1,2,3,4,5)
*a,b,c = tpl
print(f'a={a}\nb={b}\nc={c}')

打印

a=[1, 2, 3]
b=4
c=5

二、可变对象

不可变类型:int、float、string 可变类型:list、tupleid(标识) type(类型) value(值)

改对象:

如a[0] = 10,则a变为[10,2,3]

改变量:

如a = [4,5,6],即a发生了改变,假设id变为0x211,此时为id(0x211)、type(class list)、value([4,5,6])

a = [1,2,3]
print(a,id(a))

打印

[1, 2, 3] 1751338668616

改对象后:

[10, 2, 3] 2337822822984

改变量后:

a = [4,5,6]
print(a,id(a))

打印

[4, 5, 6] 1384044909640

将a赋给新变量b:

a = [1,2,3]
b = a
b[0] = 10
print('a:',a,id(a))
print('b:',b,id(b))

打印

a: [10, 2, 3] 1963325084232
b: [10, 2, 3] 1963325084232

显示,a和b的值和id完全一致。

a = [1,2,3]
b = a
b = [10,2,3]
print('a:',a,id(a))
print('b:',b,id(b))

打印

a: [1, 2, 3] 2260109775432
b: [10, 2, 3] 2260109775944

此时b和a不一致,因为b是通过列表创建重新生成的,系统会重新分配一个内存地址,所以id会不同。

三、==和is

== 和 !=:

a = [1,2,3]
b = [1,2,3]
print(a == b)
print(a is b)

打印

True
False

!=和is not的用法类似。

四、字典的简介

1.定义

表现形式:dict字典中键和值的类型

2.创建字典

(1)用{}

语法:{key1:value1,key2:value2,…}

d = {'name':'Tom','age':'20','gender':'male'}
print(d,type(d))

打印

{'name': 'Tom', 'age': '20', 'gender': 'male'} <class 'dict'>

字典的键不能重复,如有重复,则后边的会覆盖前边的。

d = {'name':'Tom','age':'20','gender':'male','name':'Jerry'}
print(d,type(d))

打印

{'name': 'Jerry', 'age': '20', 'gender': 'male'} <class 'dict'>

即前边的Tom被覆盖。

d = {
    'name':'Tom',
    'age':'20',
    'gender':'male'
    }
print(d,type(d))

输出与之前相同。

(2)用dict()函数

方式一:

d = dict(name = 'Tom',age=20,gender='male')
print(d)

打印

{'name': 'Tom', 'age': 20, 'gender': 'male'}

方式二:

d = dict([('name','Tom'),('age',20)])
print(d,type(d))

打印

{'name': 'Tom', 'age': 20} <class 'dict'>

解释:

3.根据键来获取值

d = {
    'name':'Tom',
    'age':'20',
    'gender':'male'
    }
print(d['name'],d['age'],d['gender'])

打印

Tom 20 male

四、字典的使用

1.len()

获取字典的长度即字典中键值对的个数

d = dict([('name','Tom'),('age',20)])
print(len(d))

结果为2

2.in、not in

检查字典中是否含有或不含有指定的键

d = dict([('name','Tom'),('age',20)])
print('hello' in d)

打印

False

3.获取字典里面的值

语法:d[key]

d = dict([('name','Tom'),('age',20)])
print(d['name'])

打印

Tom

如将键赋值给一个变量,则通过变量访问时不需要引号

d = {'name':'Tom','age':'20','gender':'male'}
b = 'name'
print(d[b])

打印

Tom

如果键不存在会报错,即KeyError

d = {'name':'Tom','age':'20','gender':'male'}
print(d['hello'])

打印

KeyError: 'hello'

如避免异常,可以用get()方法get([,default])

d = {'name':'Tom','age':'20','gender':'male'}
print(d.get('hello','no such key'))

打印

no such key

4.修改字典

语法:d[key] = value

d = {'name':'Tom','age':'20','gender':'male'}
d['name'] = 'Jerry'
d['phone'] = '010-11111111'
print(d)

打印

{'name': 'Jerry', 'age': '20', 'gender': 'male', 'phone': '010-11111111'}

5.setdefault()函数

可以向字典当中添加key-value

d = {'name':'Tom','age':'20','gender':'male'}
result = d.setdefault('name','Jerry')
print(d,result)

打印

{'name': 'Tom', 'age': '20', 'gender': 'male'} Tom

key不存在时,

d = {'name':'Tom','age':'20','gender':'male'}
result = d.setdefault('phone','010-11111111')
print(d,'\n',result)

打印

{'name': 'Tom', 'age': '20', 'gender': 'male', 'phone': '010-11111111'}
 010-11111111

## 6.update()函数

d1 = {'a':1,'b':2,'c':3}
d2 = {'d':4,'e':5,'f':6}
d1.update(d2)
print(d1)

打印

{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}

如存在相同的键,则覆盖

d1 = {'a':1,'b':2,'c':3}
d2 = {'b':4,'e':5,'f':6}
d1.update(d2)
print(d1)

打印

{'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6}

7.删除

方式一:del()

删除字典中的key和value

d = {'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6}
del d['a']
del d['b']
print(d)

打印

{'c': 3, 'e': 5, 'f': 6}

方式二:d.popitem()

随机删除字典中的一个键值对,一般情况会删除最后一个键值对。

d = {'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6}
result = d.popitem()
print('result =',result)
print(d)

打印

result = ('f', 6)
{'a': 1, 'b': 4, 'c': 3, 'e': 5}

方式三:d.pop([,default])

根据keyshanchu字典中的键值对,返回的是被删除的value值

d = {'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6}
result = d.pop('b')
print('result =',result)
print(d)

打印

result = 4
{'a': 1, 'c': 3, 'e': 5, 'f': 6}

如被删除不存在的键,则报错

d = {'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6}
result = d.pop('z')
print('result =',result)
print(d)

抛出异常:KeyError: 'z'

d = {'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6}
result = d.pop('z','no such key')
print('result =',result)
print(d)

打印

result = no such key
{'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6}

方式四:d.clear()

用来清空字典

d = {'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6}
d.clear()
print(d)

结果为:{}

浅复制(浅拷贝)

copy():用于将字典浅复制,即创建已有字典的副本

d = {'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6}
d2 = d
print(d,id(d))
print(d2,id(d2))

打印

{'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6} 1997496449288
{'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6} 1997496449288

d和d2指向同一个对象。

d = {'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6}
d2 = d
d['a'] = 7
print(d,id(d))
print(d2,id(d2))

打印

{'a': 7, 'b': 4, 'c': 3, 'e': 5, 'f': 6} 2121296378120
{'a': 7, 'b': 4, 'c': 3, 'e': 5, 'f': 6} 2121296378120

用copy()方法:

d = {'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6}
d2 = d.copy()
print(d,id(d))
print(d2,id(d2))

打印

{'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6} 3102906251528
{'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6} 3102906251608

d和d2指向不同对象。

d = {'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6}
d2 = d.copy()
d['a'] = 7
print(d,id(d))
print(d2,id(d2))

打印

{'a': 7, 'b': 4, 'c': 3, 'e': 5, 'f': 6} 2430767003912
{'a': 1, 'b': 4, 'c': 3, 'e': 5, 'f': 6} 2430767003992

当字典的值为字典时,

d = {'a': {'name':'Tom','age':'20','gender':'male'}, 'b': 4, 'c': 3, 'e': 5, 'f': 6}
d2 = d.copy()
print(d,id(d))
print(d2,id(d2))

打印

{'a': {'name': 'Tom', 'age': '20', 'gender': 'male'}, 'b': 4, 'c': 3, 'e': 5, 'f': 6} 2220628113672
{'a': {'name': 'Tom', 'age': '20', 'gender': 'male'}, 'b': 4, 'c': 3, 'e': 5, 'f': 6} 2220628114392

当d中的值的值改变时,

d = {'a': {'name':'Tom','age':'20','gender':'male'}, 'b': 4, 'c': 3, 'e': 5, 'f': 6}
d2 = d.copy()
d['a']['name'] = 'Jerry'
print(d,id(d))
print(d2,id(d2))

打印

{'a': {'name': 'Jerry', 'age': '20', 'gender': 'male'}, 'b': 4, 'c': 3, 'e': 5, 'f': 6} 2104435669336
{'a': {'name': 'Jerry', 'age': '20', 'gender': 'male'}, 'b': 4, 'c': 3, 'e': 5, 'f': 6} 2104435670056

复制:即创建已有对象的副本,则原对象改变,副本应该不发生改变,这才是正常的复制。浅复制只会复制字典本身,如果字典中还有字典,是不会被复制的

七、遍历字典

1.方式一:keys()

该方法会返回字典所有的键。

d = {'name':'Tom','age':'20','gender':'male'}
for key in d.keys():
    print(d[key])

打印

Tom
20
male

2.values()

返回一个序列,保存字典的值

d = {'name':'Tom','age':'20','gender':'male'}
for value in d.values():
    print(value)

打印

Tom
20
male

3.items()

返回字典中所有的项,会返回一个序列,序列中包含双值子序列,双值分别为字典中的key-value。

d = {'name':'Tom','age':'20','gender':'male'}
for key,value in d.items():
    print(key,'=',value)

打印

name = Tom
age = 20
gender = male

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值