Python基础学习之-------dictionary字典

版权声明:本博客内原创文章禁止转载 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: '更新值'}

猜你喜欢

转载自blog.csdn.net/qq_32466233/article/details/82079887
今日推荐