欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Collections -- OrderedDict类

程序员文章站 2022-06-23 09:26:25
普通dict(字典)在插入的时候并不记住元素的顺序,迭代器会根据散列表(哈希表)中存储的顺序来生成的。而OrderedDict则会记录元素的顺序,并且在迭代器输出时,会按现在记录的顺序进行遍历。 例: 创建有序字典: import collections as c dict = c.OrderedD ......

普通dict(字典)在插入的时候并不记住元素的顺序,迭代器会根据散列表(哈希表)中存储的顺序来生成的。而ordereddict则会记录元素的顺序,并且在迭代器输出时,会按现在记录的顺序进行遍历。

例:

创建有序字典:

  import collections as c

  dict = c.ordereddict()

  dict['hello'] = '你好'

  dict['cute'] = '可爱'

  dict['busy'] = '忙碌'

  dict['just'] = '刚才'

 

  for k,v in dict.items():
    print('{0} = {1}'.format(k,v))

 

结果:

  hello = 你好

  cute = 可爱

  busy = 忙碌

  just = 刚才

 

clear():清空有序字典,清空字典所有项。,会输出一个ordereddict()对象。

例:

  print(dict.clear())

结果:

  ordereddict()

 

copy():浅拷贝

  print(dict.copy())

结果:ordereddict([('hello', '你好'), ('cute', '可爱'), ('busy', '忙碌'), ('just', '刚才')])

 

pop():删除指定的键,如果找不到该键则报错。

例: 

  hello=dic.pop('hello')

  print(hello)

结果:

  你好

 

clear()和pop()的区别:

pop():可以把有序字典看为一个栈,当需要其中某一个键值对的时候,可以使用pop()方法,根据键弹出这个值,赋给一个变量然后去使用这个值。弹出来栈里就没有该键了,如果你再去访问它就会报错。(pop()方法差不多都是这个原理,仅限于博主接触到的)

clear():是清空有序字典里的所有项,做了清空操作里面的键值对就会不存在。

 

items():返回有键值对组成的列表

例:

  for k,v in dic.items():

  print('{0} = {1}'.format(k,v))

结果:

hello = 你好
cute = 可爱
busy = 忙碌
just = 刚才

当for循环里只有一个参数接收键值对时,它输出的是有序字典里面的每个元素,是用括号括起来的。

例:

  for k in dic.items():

  print('{0}'.format(k))

结果:

('hello', '你好')
('cute', '可爱')
('busy', '忙碌')
('just', '刚才')

 

浅拷贝和深拷贝的区别:

copy():浅拷贝,浅拷贝没有拷贝子对象,只是引用了子对象,所以改变原始数据的子对象,那浅拷贝后的数据也会被改变。可以看出,copy()方法都是浅拷贝。

例:

  a=[1,2,3,4,[5,6]]  

  print(a)      

  b=a.copy()

  print(b)

  print('-' * 20)

  a[4][0]=8

  print(a)

  print(b)

结果:

[1, 2, 3, 4, [5, 6]]  
[1, 2, 3, 4, [5, 6]]
--------------------
[1, 2, 3, 4, [8, 6]]
[1, 2, 3, 4, [8, 6]]

首先定义一个列表a,再输出这个a,然后再拷贝一下a并且复制给b,并输出b,最后进行修改子对象里的第一个值修改为8,这时输出a和b它俩的子对象同时改为8.

deepcopy():深拷贝,他和子对象一起拷贝了一个新的,并不是引用了子对象,所以改变原始数据的子对象,那拷贝后的数据也不会被改变。深拷贝需要导入copy模块,然后使用deepcopy()方法进行拷贝,需要给这个方法放入一个要拷贝的参数。

例:

  import copy

  a=[1,2,3,4,[5,6]]  

  print(a)  

  b=copy.deepcopy(a)

  print(b)

  print('-' * 20)

  a[4][0]=8

  print(a)

  print(b)

结果:

[1, 2, 3, 4, [5, 6]]
[1, 2, 3, 4, [5, 6]]
--------------------
[1, 2, 3, 4, [8, 6]]
[1, 2, 3, 4, [5, 6]]

首先定义一个列表a,再输出这个a,然后再深拷贝一下a并且复制给b,并输出b,最后进行修改子对象里的第一个值修改为8,这时输出a的子对象改为8,b的子对象不会变。