Collections -- OrderedDict类
普通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类的更多相关文章
- python之OrderedDict类
# OrderedDict类使用举例 # OrderedDict类的使用与字典相似,不同的是OrderedDict类会记录键值对的添加顺序 from collections import Ordere ...
- JAVA Collections工具类sort()排序方法
主要分析内容: 一.Collections工具类两种sort()方法 二.示例 一.Collections工具类两种sort()方法 格式一: public static <T extends ...
- python3 OrderedDict类(有序字典)
创建有序字典 import collections dic = collections.OrderedDict() dic['k1'] = 'v1' dic['k2'] = 'v2' dic['k3' ...
- Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌
1.Map集合概述和特点 * A:Map接口概述 * 查看API可以知道: * 将键映射到值的对象 * 一个映射不能包含重复的键 * 每个键最多 ...
- Arrays工具类和Collections工具类
集合知识点总结 Arrays工具类 .binarySearch() .sort() .fill() //填充 int[] array = new int[10]; Arrays.fill(array, ...
- Python collections.OrderedDict解决dict元素顺序问题
编程中遇到个问题,python json.loads时元素顺序可能会发生变化. 这个对于一些需要使用元素顺序来做一些策略的代码来说是致命的. 在网上查了查,结合自己的知识总结一下. 使用dict时,K ...
- day07(Set接口,HashSet类,hashcoad(),Collections工具类,Map集合)
Set接口 set接口的实现类特点 1.无序(取出来的顺序和存进去的数据的顺序不一致) 2.唯一(数据不能存相同的) 底层是用Map集合写的 HashSet类 实现了 set接口 唯一 ...
- 34、Collections工具类简介
Collections工具类简介 就像数组中的Arrays工具类一样,在集合里面也有跟Arrays类似的工具类Collections package com.sutaoyu.Collections; ...
- TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小.TreeMap要求存放的键值对映射的键必 ...
随机推荐
- 浅析C#中new、override、virtual关键字的区别
Virtual : virtual 关键字用于修饰方法.属性.索引器或事件声明,并使它们可以在派生类中被重写. 默认情况下,方法是非虚拟的.不能重写非虚方法. virtual 修饰符不能与 stati ...
- 我的第一个python web开发框架(41)——总结
我的第一个python web开发框架系列博文从17年6.7月份开始写(存了近十章稿留到9月份才开始发布),到今天结束,一年多时间,想想真不容易啊. 整个过程断断续续,中间有段时间由于工作繁忙停了好长 ...
- Loj #3096. 「SNOI2019」数论
Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...
- JS中各种宽度距离小结
js中获取各种宽度和距离,常常让我们混淆,各种浏览器的不兼容让我们很头疼,现在就在说说js中有哪些宽度和距离. 1.名词解释 screen:屏幕.这一类取到的是关于屏幕的宽度和距离,与浏览器无关,应该 ...
- python读写excel文件
'''xlrd和xlwt处理的是xls文件,单个sheet最大行数是65535,如果有更大需要的,建议使用openpyxl函数,最大行数达到1048576.'''import openpyxl ''' ...
- 微信支付之01------获取订单微信支付二维码的接口------Java实现
[ 前言:以前写过一个获取微信二维码支付的接口,发现最近公司新开的项目会经常用到,现在我又翻出代码看了一遍,觉得还是把整个代码流程记下来的好 ] 借鉴博客: 他这篇博客写得不错,挺全的:https:/ ...
- React Native Flexbox & CSS3 Flexbox
React Native Flexbox & CSS3 Flexbox https://facebook.github.io/react-native/docs/flexbox/ https: ...
- 为什么qt成为c++界面编程的第一选择
为什么qt成为c++界面编程的第一选择 一.前言 为什么现在QT越来越成为界面编程的第一选择,笔者从事qt界面编程已经有接近8年,在这之前我做C++界面都是基于MFC,也做过5年左右.当时为什么会从M ...
- Windows XP Services
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
- bat脚本基本命令和格式
bat脚本 --莫非 BAT脚本与shell脚本区别 Shell脚本使用Linux/Unix下的命令,一般文件开头以#号来告诉系统这个脚本需要什么解释器来执行(如:#!/bin/bash采用bash而 ...