版权声明:本博客内原创文章禁止转载 https://blog.csdn.net/qq_32466233/article/details/82079887
字典是python常用的一种映射类型,这种类型采用键-值的方式对应起来,是一个非常方便灵活的数据结构方法。
接下来,我们介绍一下如何利用fromkeys关键字初始化字典。例子如下:
dict1={}#创建一个空字典
dict1.fromkeys((1,2,3))#设置字典的三个key但不赋予value
Out[4]: {1: None, 2: None, 3: None}#创建后的结果
我们队上述创建过程稍作改进,我们创建字典并赋予其值:
dict1.fromkeys((1,2,3),'number')#创建字典并赋予值‘number’
Out[5]: {1: 'number', 2: 'number', 3: 'number'}#三个键对应的值都是number
dict1.fromkeys((1,2,3),('one','two','three'))#创建字典并试图分别给三个键赋予不同的值
Out[6]:
{1: ('one', 'two', 'three'),
2: ('one', 'two', 'three'),
3: ('one', 'two', 'three')}#结果显示这种方式没有办法分别给键赋予对应的值
可以看到,利用fromkeys关键字创建字典并不能分别赋予不同的键不同的值。接下来,我们继续讨论一下对字典的访问。
字典的访问分为三种,第一种是对字典key的访问,第二种是对字典value的访问,第三种是对字典每一个item的访问。
In [1]: dict1={1:100,2:200,3:300}
In [2]: dict1
Out[2]: {1: 100, 2: 200, 3: 300}
In [3]: for eachkey in dict1.keys():#对键的访问
...: print(eachkey)
...:
1
2
3
In [4]: for eachvalue in dict1.values():#对值得访问
...: print(eachvalue)
...:
100
200
300
In [5]: for eachitem in dict1.items():#对每一个数据项的访问
...: print(eachitem)
...:
(1, 100)
(2, 200)
(3, 300)
在字典当中,我们不能够访问不存在的数据项item,如果我们访问不存在的数据项,就会报错。
In [6]: dict1
Out[6]: {1: 100, 2: 200, 3: 300}
In [7]: dict1[4]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-7-d56c1f331a01> in <module>()
----> 1 dict1[4]
KeyError: 4
为了防止发生报错,可以采用get方法。
In [8]: print(dict1.get(3,'不存在该项'))
300
In [9]: print(dict1.get(5,'不存在该项'))
不存在该项
如果不确定一个key是否在字典中,可以采用以下语句来进行判断:
In [11]: 1 in dict1
Out[11]: True
In [12]: 4 in dict1
Out[12]: False
下面再介绍一下dictionary当中的浅拷贝和赋值的区别:
In [13]: dict1
Out[13]: {1: 100, 2: 200, 3: 300}
In [14]: dict2=dict1.copy()
In [15]: dict3=dict1
In [16]: dict1
Out[16]: {1: 100, 2: 200, 3: 300}
In [17]: dict2
Out[17]: {1: 100, 2: 200, 3: 300}
In [18]: dict3
Out[18]: {1: 100, 2: 200, 3: 300}
In [19]: id(dict1)
Out[19]: 1657856849528
In [20]: id(dict2)
Out[20]: 1657857372592
In [21]: id(dict3)
Out[21]: 1657856849528
我们可以看到,虽然浅拷贝和赋值之后的字典的值和键都没有区别,但是赋值后的字典实际上是同一个地址的不同名字表达,而浅拷贝所在的地址不同于赋值。
下面再解释一下pop,popitem关键字操作。这个关键字的作用是弹出一个字典中的值。
pop是选择性的弹出指定位置的item。popitem是随机的弹出某一个位置的item
In [22]: dict1
Out[22]: {1: 100, 2: 200, 3: 300}
In [23]: dict1.pop(2)
Out[23]: 200
--------------------------------------------------
In [51]: dict1={1:100,2:200,3:300,4:400,5:500}
In [52]: dict1.popitem()
Out[52]: (5, 500)
In [53]: dict1
Out[53]: {1: 100, 2: 200, 3: 300, 4: 400}
如果要在字典中添加某一项,那么可以用setdefault函数添加:
In [54]: dict1
Out[54]: {1: 100, 2: 200, 3: 300, 4: 400}
In [55]: dict1.setdefault(5,'five')
Out[55]: 'five'
In [56]: dict1
Out[56]: {1: 100, 2: 200, 3: 300, 4: 400, 5: 'five'}
不过需要注意的是,由于字典中没有顺序的概念,所以添加的位置是不固定的。
下面我们来说一下利用字典的关键字update来更新字典中某一个项的value的方法。
In [56]: dict1
Out[56]: {1: 100, 2: 200, 3: 300, 4: 400, 5: 'five'}
In [57]: dict1
Out[57]: {1: 100, 2: 200, 3: 300, 4: 400, 5: 'five'}
In [58]: b={5:'更新值'}
In [59]: dict1.update(b)
In [60]: dict1
Out[60]: {1: 100, 2: 200, 3: 300, 4: 400, 5: '更新值'}