Python中dict详解

目录

dick

定义一个dict

定义空字典 

类型转换

dict内置函数详解

1.clear

2. copy 

3. get

4.items

5.keys

6.values

7.pop

8.popitem

9.setdefault

10.update

课后扩展


dick

dick dictionary 字典
特点:
    根据关键字去获取内容
    关键字不能重复
    关键字必须是不可变的数据类型
定义dict的语法
定义dict:根据key去取value
字典中的元素必须具俩个部分key和value
{元素一, 元素二, 元素三, ...}dict中也可含有多个元素,元素之间通过“,”隔开
如何去访问一个字典
dict[key]
如何去修改
dict[key] = vaule->如果key不存在,就相当于添加了一个元素
                    如果key存在,就覆盖这个key所对应的值
list_data2 = {1: 2, 3: 4, 5: [1, 2, 3], 6: {2: [1, 2]}}

print(list_data2)
print(list_data2[6][2][1])      # 输出结果 2   

定义一个dict

dict_data = {1: 1, 1.1: 1.1, 6+9j: 6+9j, "123": "123", b'456': b'456', None: None, False: True, (1, 2): (1, 2), [1, 2]: [1, 2], {1, 2}: {1: 2}}
print(dict_data)
发生报错
'''
D:\AXXZX\Python\python\python.exe D:\python_code\dict.py
Traceback (most recent call last):
  File "D:\python_code\dict.py", line 53, in <module>
    dict_data = {1: 1, 1.1: 1.1, 6+9j: 6+9j, "123": "123", b'456': b'456', None: None, False: True, \
TypeError: unhashable type: 'list'   不可哈希类型:'list'

Process finished with exit code 1
'''
 经过解读报错后,将字典中list元素所对应的key更改为一个int类型数据
dict_data2 = {1: 1, 1.1: 1.1, 6+9j: 6+9j, "123": "123", b'456': b'456', None: None, False: True, (1, 2): (1, 2), 9: [1, 2], {1: 2}: {1: 2}}
print(dict_data2)
 依然会进行报错
'''
D:\AXXZX\Python\python\python.exe D:\python_code\dict.py
Traceback (most recent call last):
  File "D:\python_code\dict.py", line 67, in <module>
  dict_data2 = {1: 1, 1.1: 1.1, 6+9j: 6+9j, "123": "123", b'456': b'456', None: None, False: True, (1, 2): (1, 2), 9: [1, 2], {1: 2}: {1: 2}}
TypeError: unhashable type: 'dict'       不可哈希类型:'dict'

Process finished with exit code 1
'''
 经过解读报错后,将字典中dict元素所对应的key更改为一个int类型数据
dict_data2 = {1: 1, 1.1: 1.1, 6+9j: 6+9j, "123": "123", b'456': b'456', None: None, False: True, (1, 2): (1, 2), 9: [1, 2], 10: {1: 2}}
print(dict_data2)
 输出结果:
'''
D:\AXXZX\Python\python\python.exe D:\python_code\dict.py
{1: 1, 1.1: 1.1, (6+9j): (6+9j), '123': '123', b'456': b'456', None: None, False: True, (1, 2): (1, 2), 9: [1, 2], 10: {1: 2}

Process finished with exit code 0
'''
 总结: 关键字必须是不可变的数据类型
dict_data2 = {1: 1, 1.1: 1.1, 6+9j: 6+9j, "123": "123", b'456': b'456', None: None, True: False, (1, 2): (1, 2), 9: [1, 2], 10: {1: 2}}
print(dict_data2, type(dict_data2))
dict_data3 = {True: False, 1.1: 1.1, 6+9j: 6+9j, "123": "123", b'456': b'456', None: None, 1: 1, (1, 2): (1, 2), 9: [1, 2], 10: {1: 2}}
print(dict_data3, type(dict_data3))
 输出结果
'''
D:\AXXZX\Python\python\python.exe D:\python_code\dict.py
{1: False, 1.1: 1.1, (6+9j): (6+9j), '123': '123', b'456': b'456', None: None, (1, 2): (1, 2), 9: [1, 2], 10: {1: 2}} <class 'dict'>
{True: 1, 1.1: 1.1, (6+9j): (6+9j), '123': '123', b'456': b'456', None: None, (1, 2): (1, 2), 9: [1, 2], 10: {1: 2}} <class 'dict'>

Process finished with exit code 0
'''
 输出第一个元素为1: False和True: 1的原因是,在python中True等于1

定义空字典 

dict_data = {}
print(dict_data, type(dict_data))
dict_data1 = dict()
print(dict_data1, type(dict_data1))

 类型转换

  将tuple转换为dict
tuple_data = ((1, 2), (2, 3.3), ("hello", "word"), [b'123', b'abc'])
dict_data3 = dict(tuple_data)
print(dict_data3, type(dict_data3))
  将list转换为dict
list_data = [(1, 2), (2, 3.3), ("hello", "word"), [b'123', b'abc']]
dict_data4 = dict(list_data)
print(dict_data4, type(dict_data4))

dict内置函数详解

1.clear

clear(...)    清除(...)
   D.clear() -> None.  Remove all items from D.   清除() -> 无。 从D中清除所有项目
dict_data = {1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7}
print(dict_data, type(dict_data))
dict_data.clear()
print(dict_data, type(dict_data))
输出结果:
'''
D:\AXXZX\Python\python\python.exe D:\python_code\dict.py
{1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7} <class 'dict'>
{} <class 'dict'>

Process finished with exit code 0
'''
 总结:clear会清除原dict中所有元素,及不产生新的dict(该命令无返回值)

2. copy 

copy(...)  拷贝
    D.copy() -> a shallow copy of D     拷贝()->   一个浅拷贝
dict_data = {1: 1, 2: 2, 3: {1: 1, 2: 2}}
shallow_data = dict_data.copy()
print(shallow_data)
from copy import deepcopy
deep_data = deepcopy(dict_data)
print(deep_data)
print(f"{'raw_id':^20}{'1st_id':^20}{'2nd_id':^20}{'3rd_id':^20}{'3-1_id':^20}{'3-1_id':^20}")
print(60*'——')
print(f"{id(dict_data):^20}{id(dict_data[1]):^20}{id(dict_data[2]):^20}{id(dict_data[3]):^20} \
{id(dict_data[3][1]):^20}{id(dict_data[3][2]):^20}")
print(60*'——')
print(f"{id(shallow_data):^20}{id(shallow_data[1]):^20}{id(shallow_data[2]):^20}{id(shallow_data[3]):^20} \
{id(shallow_data[3][1]):^20}{id(shallow_data[3][2]):^20}")
print(60*'——')
print(f"{id(deep_data):^20}{id(deep_data[1]):^20}{id(deep_data[2]):^20}{id(deep_data[3]):^20} \
{id(deep_data[3][1]):^20}{id(deep_data[3][2]):^20}")
输出结果:
'''
D:\AXXZX\Python\python\python.exe D:\python_code\dict.py
{1: 1, 2: 2, 3: {1: 1, 2: 2}}
{1: 1, 2: 2, 3: {1: 1, 2: 2}}
       raw_id              1st_id              2nd_id              3rd_id              3-1_id              3-1_id
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
   2373522097216       2373520785648       2373520785680       2373522096960        2373520785648       2373520785680
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
   2373522097024       2373520785648       2373520785680       2373522096960        2373520785648       2373520785680
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
   2373522097344       2373520785648       2373520785680       2373522423296        2373520785648       2373520785680

Process finished with exit code 0
'''
  原dict内元素发生改变浅拷贝产生的新dict也会发生改变,而深拷贝产生的dict不会改变。
  浅拷贝:只复制元素一元素二以及元素三(字典地址)的地址,及只复制外层元素的地址。 
  深拷贝:将列表完整的复制一份,及外层元素内层元素的所有地址都给予复制 
得出如图所示结果:

3. get

 get(self, key, default=None, /)        获取(自身(可省略),key,默认值为无,/)
     Return the value for key if key is in the dictionary, else default.
     如果key在字典中,则返回key的值,否则返回默认值
dict_data = {1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7}
 打印key=6对应值
print(dict_data.get(6))       # 返回值为 7
 打印key=10对应值
print(dict_data.get(10))      # 返回值为 None
 总结:
 如果输入key值存在,那么返回key所对应的value
 如果输入key值不存在那么返回None

4.items

items(...)  项目(...)
     获取dict中所有key所对应的value
dict_data = {1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7}
 取出dict_data所对应的元素
for i in dict_data.items():
    print(i)
 取出dict_data1所对应的元素
dict_data1 = {1: 1, 2: 2, 3: {1: 1, 2: 2}}
for i in dict_data1.items():
    print(i)
 总结:一般itmes取出的值会以tuple形式存在
 将下列dict的key与value分辨取出
dict_data = {1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7}
for key, value in dict_data.items():
    print(key, value)
dict_data1 = {1: 1, 2: 2, 3: {1: 1, 2: 2}}
print(40*"-")
for key, value in dict_data1.items():
    print(key, value)
 运行结果:
'''
D:\AXXZX\Python\python\python.exe D:\python_code\dict.py
1 2
2 3
3 4
4 5
5 6
6 7
----------------------------------------
1 1
2 2
3 {1: 1, 2: 2}

Process finished with exit code 0
'''

5.keys

keys(...)      key
    返回字典中所有的key
dict_data = {1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7}
 直接打印出dict中所有的key
print(dict_data.keys())
 结果将以列表的形式返回
for i in dict_data.keys():
    print(i)
 运行结果;
'''
D:\AXXZX\Python\python\python.exe D:\python_code\dict.py
1
2
3
4
5
6

Process finished with exit code 0
'''

6.values

values(...)  值(...)
     返回字典中所存在的所有值
dict_data = {1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7}
  直接打印出dict中所有的value
print(dict_data.values())
  结果将以列表的形式返回
for i in dict_data.values():
    print(i)
  运行结果:
'''
D:\AXXZX\Python\python\python.exe D:\python_code\dict.py
2
3
4
5
6
7

Process finished with exit code 0

'''

7.pop

pop(...)     移除/弹出(key)
    D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
                       删除指定的键并返回相应的值(删除指定的key和对应的值)
    If key is not found, default is returned if given, otherwise KeyError is raised
    如果找不到键,则返回默认值如果给定,则引发 key错误
dict_data = {1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7}
dict_data.pop(6)
print(dict_data)
dict_data.pop(3)
print(dict_data)
 运行结果:
'''
D:\AXXZX\Python\python\python.exe D:\python_code\dict.py
{1: 2, 2: 3, 3: 4, 4: 5, 5: 6}
{1: 2, 2: 3, 4: 5, 5: 6}

Process finished with exit code 0

'''
 总结:该函数是在原dict上进行操作的因此会改变原有的dict。

8.popitem

popitem(self, /)        弹出项(自身(可省略),/)
      Remove and return a (key, value) pair as a 2-tuple.
      移除并返回一个(键,值)对作为一个2元组(删除dict中的最后一对键和值。)
      Pairs are returned in LIFO (last-in, first-out) order.
      对子按后进先出的顺序返回。
      Raises KeyError if the dict is empty.
      如果字典为空,则引发Key错误。
dict_data = {1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7}
dict_data.popitem()
print(dict_data)
dict_data.popitem()
print(dict_data)
 运行结果:
'''
D:\AXXZX\Python\python\python.exe D:\python_code\dict.py
{1: 2, 2: 3, 3: 4, 4: 5, 5: 6}
{1: 2, 2: 3, 3: 4, 4: 5}

Process finished with exit code 0
'''

 9.setdefault

setdefault(self, key, default=None, /)  设置默认值(自身(可省略),键,默认值=无,/)
     Insert key with a value of default if key is not in the dictionary.
     如果键不在字典中,则插入默认值的键。
     Return the value for key if key is in the dictionary, else default.
     如果key在字典中,则返回key的值,否则返回默认值。

dict_data = {1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7}
 打印key=3对应值:

print(dict_data.setdefault(3))
 打印key=10对应值:
print(dict_data.setdefault(10))        # 返回值为None

10.update

update(...) 更新(...)
    字典更新,将字典dict2元素更新到dict1里
 例:

dict_data1 = {1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7}
dict_data2 = {1: 1, 2: 2, 3: {1: 1, 2: 2}}
     字典更新,将字典dict_data2元素更新到dict_data1 里
dict_data1.update(dict_data2)
print(dict_data1)
 将dict_data4更新到dict_data3中
dict_data3 = {1: 2, 2: 3, 3: 4}
dict_data4 = {1: 3, 3: (1, 2)}
dict_data3.update(dict_data4)
print(dict_data3)

  将dict_data6更新到dict_data5中

dict_data5 = {1: 2, 2: 3}
dict_data6 = {4: 5, 6: {1: 2, 3: 4}, (1, 2): [1, 3, (1, 2)]}
dict_data5.update(dict_data6)
print(dict_data5)
 总结:
     如果被更新的字典中己包含对应的键-值对,那么原键-值对会被覆盖,
     如果被更新的字典中不包含对应的键-值对,则添加该键-值对。

 课后扩展

 获取一个list的下标与对应元素
list_data = [1, 1.1, 6+6j, True, None, 'abcd', b'abcd', (1, 2, 3, 4, 5), [1, 2.2, 'AAA'], {1: 2, 3: 4, 5: (1, 2) }]
for index, value in enumerate(list_data):
    print(index, value)
 输出结果
'''
D:\AXXZX\Python\python\python.exe D:\python_code\exercise.py 
0 1
1 1.1
2 (6+6j)
3 True
4 None
5 abcd
6 b'abcd'
7 (1, 2, 3, 4, 5)
8 [1, 2.2, 'AAA']
9 {1: 2, 3: 4, 5: (1, 2)}

Process finished with exit code 0

'''

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱玩网络的小石

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值