Python基础从0到1自我学习(4)

Key + value ——> dict(字典)

字典(dict)是python的一种内置的数据结构。在其他语言中也称为map,使用 键-值 (key - value)存储,可以通过查找某个特定的词语(键 key),从而找到它的定义(值 value)。

创建字典的两种方法

1. 直接定义

>>> phonebook = {'zhang':'231', 'wang':'123'}
>>> type(phonebook)
<class 'dict'>

2. 通过dict函数

>>> items = [('name', 'zhang'), ('age', 2)]
>>> d = dict(items)
>>> d
{'age':2, 'name': 'zhang'}
>>>type(d)
<class 'dict'>
>>> d['name']
'zhang'

# dict 函数也可以通过关键字参数来创建字典
>>> d = dict(name = 'zhang', age = 2)
>>> d
{'age': 2, 'name': 'zhang'}

key 有啥特性

字典中的值可以是任何的python对象,但键不行,键必须是不可变的。关于字典的键有一下两点值得注意:

  1. 如果同一个键被赋值两次,后一个值会被记住
>>> c = {'age': 18, 'name': 'derek', 'age': 20}
>>> c['age']
20
  1. 键是不可变得,所以数字、字符串或元组可以作为键,而用列表就不行,如下实例:
>>> a = {[234, 23]: 'aa'}
Traceback (most recent call last):
  	File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

>>> a = {(123, 23): 'aa'}
>>> a
{(123, 23): 'aa'}

dict 增删改查如何实现

>>> phonebook = {'zhang': '231', 'wang': '123}
# 返回phonebook中键值对的数量
>>> len(phonebook)
2
# 返回键zhang的值
>>> phonebook['zhang']
231
>>> phonebook['wang']
123

# 将v值赋值到wang键上
>>> phonebook['wang'] = 666
>>> phonebook
{'zhang': '231', 'wang': 666}

# 若键不在字典中,则自动添加到字典中,和序列不同
>>> phonebook['liu': 888]
>>> phonebook
{'zhang': '231', 'wang': 666, 'liu': 888}

# 删除键wang
>>> del phonebook['wang']
>>> phonebook
{'zhang': '231', 'liu': 888}

# 检查字典中是否存在 某个键
>>> 'wang' in phonebook
False
>>> 'zhang' in phonebook
True

# del 也可以删除整个字典,删除后,变量不存在了
>>> del phonebook
>>> phonebook
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'phonebook' is not defined

dict --> str

在每个转换说明符中的%后加上键(用括号),后面再跟上其他说明元素。

>>> phonebook = {'zhang': '123', 'san': '567'}
>>> "liu's phone number is %(liu)s." % phonebook
"liu's phone number is 234."
>>> "liu's phone number is %(san)d." % phonebook
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a real number is required, not str
>>> 

字典有哪些常用方法

  1. clear —— 清除字典中的所有项。无返回值,或者可以理解为返回None
>>> d = {}
>>> d['name'] = 'zhang'
>>> d['age'] = 23
>>> d
{'name': 'zhang', 'age': 23}
>>> return_value = d.clear()
>>> print(return_value)
None
  1. copy —— 返回一个具有相同键-值的新字典
    当简单的值替换的时候,原始字典和复制过来的字典之间互不影响,但是当添加,删除等修改草足的时候,两者之间会相互影响。——可以理解为浅复制
>>> d = {'age': 23, 'name': 'liu'}
>>> c = d.copy()
>>> c
{'age': 23, 'name': 'liu'}
>>> c['age'] = 18
>>> c
{'age': 18, 'name': 'liu'}
>>> d
{'age': 23, 'name': 'liu'}
>>> d = {'name': ['An','Assan']}
>>> c = d.copy()
>>> c
{'name': ['An', 'Assan']}
>>> c['name'].append('body')
>>> c
{'name': ['An', 'Assan', 'body']}
>>> d
{'name': ['An', 'Assan', 'body']}

copy对于一个复杂对象的子对象并不会完全复制,什么事复杂对象的子对象呢?就比如序列里的嵌套序列,字典里的嵌套序列等都是复杂对象的子对象。对于子对象,python会把它当作一个公共镜像存储起来,所有对他的复制都被当成一个引用,所以说当其中一个引用将镜像改变了之后另一个引用使用镜像的时候镜像已经被改变了。链接: 原文讲解

deepcopy可以避免出现上面的情况,我们可以理解为完全复制然后变成一个新的对象,复制的对象和被复制的对象没有任何关系,彼此之间无论怎么改变都相互不影响。

>>> from copy import deepcopy
>>> d = {'name': ['An', 'Assan']}
>>> c = deepcopy(d)
>>> c
{'name': ['An', 'Assan']}

>>> c['name'].append('su')
>>> c
{'name': ['An', 'Assan', 'su']}
>>> d
{'name': ['An', 'Assan']}
  1. fromkeys——使用给定的键建立新的字典,每个键默认对应的值为None
>>> {}.fromkeys(['name', 'age'])
{'name': None, 'age': None}
#  直接在类型函数dict 上引用方法
>>> dict.fromkeys(['name', 'age'])
{'name': None, 'age': None}
# 设置默认值
>>> dict.fromkeys(['name', 'age'], 'unkonw')
{'name': 'unkonw', 'age': 'unkonw'}

  1. get——更宽松的访问字典项的方法,如果键不存在,返回None
>>> d = {}
>>> print(d.get('a'))
None
# 定义默认值,如果不存在的话不返回None,返回默认值
>>> d.get('a', 'N/A')
'N/A'
>>> d['a']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'a'
  1. items——将字典所有项以列表方式返回,列表中每一项都会表示为(键,值)对的形式,但没有什么次序
>>> d = {'title':'i am a tiger', 'age':10}
>>> d.items()
dict_items([('title', 'i am a tiger'), ('age', 10)])

  1. keys ——将字典中的键以列表形式返回
>>> d = {'title':'i am a tiger', 'age':10}
>>> d.keys()
dict_keys(['title', 'age'])
  1. pop——用来获得对应的键的值,并删除这对键值对
>>> d
{'title': 'i am a tiger', 'age': 10}
>>> d.pop('age')
10
>>> d
{'title': 'i am a tiger'}
# 键不存在,报错
>>> d.pop('name')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'name'
  1. popitem ——弹出随机的项,并删除
>>> d
{'title': 'i am a tiger', 'age': 10}
>>> d.popitem()
('age', 10)
>>> d
{'title': 'i am a tiger'}
  1. setdefault——类似于get方法,能够获得给定键相关联的值,还能在字典中不含有给定键的情况下设定相应的键值
>>> d = {}
>>> d.setdefault('name', 'N/A')
'N/A'
>>> d
{'name': 'N/A'}
>>> d['name'] = 'zhang'
>>> d.setdefault('name','N/A')
'zhang'
>>> d
{'name': 'zhang'}
  1. update——利用一个字典更新另一个字典,被更新的字典会加到原字典中,键相同的话会被覆盖
>>> d = {'title':'i am a tiger', 'age':10}
>>> x = {'age': 20}
>>> d.update(x)
>>> d
{'title': 'i am a tiger', 'age': 20}
>>> 
>>> y = {'sex':'male'}
>>> d.update(y)
>>> d
{'title': 'i am a tiger', 'age': 20, 'sex': 'male'}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值