普通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的子对象不会变。

Collections -- OrderedDict类的更多相关文章

  1. python之OrderedDict类

    # OrderedDict类使用举例 # OrderedDict类的使用与字典相似,不同的是OrderedDict类会记录键值对的添加顺序 from collections import Ordere ...

  2. JAVA Collections工具类sort()排序方法

    主要分析内容: 一.Collections工具类两种sort()方法 二.示例 一.Collections工具类两种sort()方法 格式一: public static <T extends ...

  3. python3 OrderedDict类(有序字典)

    创建有序字典 import collections dic = collections.OrderedDict() dic['k1'] = 'v1' dic['k2'] = 'v2' dic['k3' ...

  4. Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌

    1.Map集合概述和特点 * A:Map接口概述  * 查看API可以知道:          * 将键映射到值的对象          * 一个映射不能包含重复的键          * 每个键最多 ...

  5. Arrays工具类和Collections工具类

    集合知识点总结 Arrays工具类 .binarySearch() .sort() .fill() //填充 int[] array = new int[10]; Arrays.fill(array, ...

  6. Python collections.OrderedDict解决dict元素顺序问题

    编程中遇到个问题,python json.loads时元素顺序可能会发生变化. 这个对于一些需要使用元素顺序来做一些策略的代码来说是致命的. 在网上查了查,结合自己的知识总结一下. 使用dict时,K ...

  7. day07(Set接口,HashSet类,hashcoad(),Collections工具类,Map集合)

    Set接口 set接口的实现类特点 1.无序(取出来的顺序和存进去的数据的顺序不一致) 2.唯一(数据不能存相同的) 底层是用Map集合写的 HashSet类  实现了  set接口       唯一 ...

  8. 34、Collections工具类简介

    Collections工具类简介 就像数组中的Arrays工具类一样,在集合里面也有跟Arrays类似的工具类Collections package com.sutaoyu.Collections; ...

  9. TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?

    TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小.TreeMap要求存放的键值对映射的键必 ...

随机推荐

  1. 使用Swagger辅助开发Fabric Application的Web API

    前面的几篇博客,我们已经把Fabric环境搭建好了,也可以使用Go开发ChainCode了,那么我们在ChainCode开发完毕后,可以通过CLI来测试ChainCode的正确性,ChainCode开 ...

  2. JS 设计模式八 -- 发布订阅者模式

    概念 发布---订阅模式又叫观察者模式,它定义了对象间的一种一对多(一个发布,多个观察)的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知. 优点 1 ...

  3. springboot项目从硬盘指定位置读取文件(获取静态资源)

    方法一:继承WebMvcConfigurerAdapter类 package com.imooc.demo.config; import org.springframework.context.ann ...

  4. Python静态网页爬取:批量获取高清壁纸

    前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...

  5. 015模块——起别名

    1.import起别名:通过as关键字可以给模块起别名: 模块名一旦起别名,原模块名就不能再使用 2.起别名的作用:①可以简化模块名字 import mmmmmmmmmmm3 as my_m3 pri ...

  6. 接口测试(jmeter和postman 接口使用)

    接口测试基础知识 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.把前端(client)和后端(server)联系起来,测试的重点是要检查数据的交换,传递和控制管理过程,以及系统 ...

  7. v-for 在 VSCode 中出现 Elements in iteration expect to have 'v-bind:key' directives.

    在 VSCode 中编辑代码时,在有 v-for 的语句下面有一条红色波浪线,鼠标放上去有提示 Elements in iteration expect to have 'v-bind:key' di ...

  8. 小白月赛13 B小A的回文串 (马拉车算法求最长回文子串)

    链接:https://ac.nowcoder.com/acm/contest/549/B来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  9. 【洛谷P1963】变换序列

    题目大意:对于一个顺序序列,求一个合法置换,可以满足一些约束,若存在多个合法置换,则输出字典序最小的一个置换. 题解:对于序列的置换是否有解的问题,可以和二分图的完美匹配相关联.由于是字典序最小,显然 ...

  10. Apache的安装与配置

    apahe官网 http://www.apache.org/ 安装及配置https://blog.csdn.net/liyang4534/article/details/78036591 常见问题的处 ...