Python中的字典和集合
一、字典(dict)
1. 概述
字典是Python唯一的映射类型。
只能使用不可变的对象(比如字符串)来作为字典的键,但是可以把不可变或可变的对象作为字典的值。
键值对在字典中以这样的方式标记:d = key1 : value1, key2 : value2 。注意它们的键/值对用冒号分割,而各个对用逗号分割,
所有这些都包括在花括号中。
字典中的键/值对是没有顺序的。
字典是 dict 类的实例/对象。
2. 创建与访问
直接通过花括号括起来键/值对来创建。可以这样来创建空字典。字典可以索引,只不过索引值是键值。
利用内置函数 dict() 来创建字典,注意整个函数只有一个参数,如下:
dict3 = dict((('F',70), ('i',105), ('h',115), ('c',67))),只要能让它找到映射关系就OK。
还可以指定关键字参数来创建字典:
dict4 = dict(Turing = '让编程改变世界'),注意此时键即 Turing 不能加引号,会报错。
对于字典还可以通过键来修改值,如果存在这个键,就会修改其值,如果根本不存在这个键,就会再添加一个键/值对。如:
dict4[‘ Turing ’] = ‘ 大家一起来编程’
dict4[' Edison '] = ' 大发明家'
>>>dict4
{'Turing': '大家一起来编程', 'Edison': '大发明家'}。
3. 字典的内置方法
1) fromkeys()
>>> dict1 = {}
>>> dict1.fromkeys((1,2,3))
{1: None, 2: None, 3: None}
>>> dict1.fromkeys((1,2,3), 'Number')
{1: 'Number', 2: 'Number', 3: 'Number'}
>>> dict1.fromkeys((1,2,3),('one','two','three'))
{1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}
>>>dict1.fromkeys((1,3),'数字')
{1: '数字', 3: '数字'}
fromkeys方法用来创建一个字典,有两个参数,一个是键,一个是值。注意第二个参数都会赋给所有的键,没有聪明的一一对应。
没有办法通过这个办法修改键的值,强制修改的话会创建一个新的字典。
2)keys() values() items()
分别遍历键、值、项。
3)get()
当索引并不是字典中的键时,访问输出时会出错,用get()方法可以巧妙的解决这个问题。
>>> print(dict2[31])
赞
>>> print(dict2[32])
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
print(dict2[32])
KeyError: 32
>>> dict2.get(32)
>>> print(dict2.get(32))
None
>>> dict2.get(32,'木有')
'木有'
>>> dict2.get(31,'木有')
'赞'
4)clear()
清空字典。如果直接把想要清空的字典赋给空字典,和clear()方法还是有很多不同的,有时候可能有威胁,还是使用clear()方法。
>>> dict2.clear()
>>> dict2
{}
>>> dict2 = {}
>>> a = {'你好': '哈哈'}
>>> b = a
>>> b
{'你好': '哈哈'}
>>> a = {}
>>> b
{'你好': '哈哈'}
>>> a = b
>>> a
{'你好': '哈哈'}
>>> b
{'你好': '哈哈'}
>>> a.clear()
>>> a
{}
>>> b
{}
5)copy()
浅拷贝,和赋值操作的不同看代码:
>>> a = {1:'one',2:'two',3:'three'}
>>> b = a.copy()
>>> c = a
>>> c
{1: 'one', 2: 'two', 3: 'three'}
>>> a
{1: 'one', 2: 'two', 3: 'three'}
>>> b
{1: 'one', 2: 'two', 3: 'three'}
>>> id(a)
57877832
>>> id(b)
57838536
>>> id(c)
57877832
6) pop() 与 popitem()
一个是弹出值,一个是弹出项,后者是随机弹出的。
>>> a.pop(2)
'two'
>>> a
{1: 'one', 3: 'three'}
>>> a.popitem()
(1, 'one')
7) setdefault()
添加键或添加键/值对。如:
(注:添加后的顺序随机)
>>> a.setdefault('sq')
>>> a
{'sq': None, 3: 'three'}
>>> a.setdefault(5,'five')
>>> a
{3: 'three', 5: 'five', 'sq': None}
8) update()
用字典来更新字典,如果参数字典中的键原字典有就更新其值,没有就自动添加上去新键。
二、集合(set)
1. 概述
集合是字典的“表亲”,花括号不只是字典的特权。当用花括号括起来一堆没有映射关系的元素时就创建了一个集合。
>>> num2 = {1, 2, 3, 4}
>>> type(num2)
<class 'set'>
2. 和数学中的概念一样,集合具有互异性,无序性(因此集合无法用于索引)。
>>> num= {1, 2, 3, 4, 6, 3, 2}
>>> num
{1, 2, 3, 4, 6}
>>> num[2]
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
num[2]
TypeError: 'set' object does not support indexing
3. 内置工厂函数 set() 可以用来创建集合,参数可以是列表,元组,甚至是字符串。
>>> set1 = set([1,2,3, 4,5])
>>> set1
{1, 2, 3, 4, 5}
4. 因为集合的互异性,反而给序列中去除相同的元素提供了一个巧妙的方法。
list2 = list(set(list1))
缺点是无法保证和原序列同样的顺序,慎用。
5. 集合的内置方法 add() remove()
创建不可变集合的函数 frozenset().
6. 其他常见集合内建方法总结

Python中的字典和集合的更多相关文章
- Python中的字典与集合
今天我们来讲一讲python中的字典与集合 Dictionary:字典 Set:集合 字典的语法: Dictionary字典(键值对) 语法: dictionary = {key:value,key: ...
- python中的字典 和 集合
python中字典是一种key-value的数据类型 字典的特性: 1.无序的 2.key必须的唯一的,so,字典天生去重 语法: 增加 修改 删除 查找 多级字典嵌套及操作 字典的其他用法 #set ...
- [19/09/19-星期四] Python中的字典和集合
一.字典 # 字典 # 使用 {} 来创建字典 d = {} # 创建了一个空字典 # 创建一个保护有数据的字典 # 语法: # {key:value,key:value,key:value} # 字 ...
- Python数据类型(字典和集合)
1.5 Dictionary(字典) 在Python中,字典用放在花括号{}中一系列键-值对表示.键和值之间用冒号分隔,键-值对之间用逗号分隔. 在字典中,你想存储多少个键-值对都可以.每个键都与一个 ...
- C#在foreach循环中修改字典等集合出错的处理
C#在foreach循环中修改字典等集合出错:System.InvalidOperationException: Collection was modified; enumeration operat ...
- 如何将xml转为python中的字典
如何将xml转为python中的字典 import cElementTree as ElementTree class XmlListConfig(list): def __init__(self, ...
- [python语法]python中如何判断一个集合是另一个集合的子集?
问:python中如何判断一个集合是另一个集合的子集? 答:用issubset()方法 语法: A.issubset(B) 返回: True 如果A是B的子集. False 如果A不是B的子集. 样例 ...
- 13.python中的字典
字典其实和之前的元祖和列表功能相似,都是用来储存一系列对象的.也就是一种可变容器,或者是我所比喻的革新派的菜单. 但也不是完全相同,我在之前曾经将字典称为特殊的'序列',是字典拥有序列的部分特性,但是 ...
- python中的字典(dict),列表(list),元组(tuple)
一,List:列表 python内置的一种数据类型是列表:list.list是一种有序的数据集合,可以随意的添加和删除其中的数据.比如列出班里所有的同学的名字,列出所有工厂员工的工号等都是可以用到列表 ...
随机推荐
- CentOS的SVN服务器搭建与自动部署全过程
CentOS的SVN服务器搭建与自动部署全过程 http://www.jb51.net/article/106218.htm authz-db = authz 引起的 svn 认证失败 http:// ...
- Python Deque 模块使用详解,python中yield的用法详解
Deque模块是Python标准库collections中的一项. 它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除. https://blog.csdn.net/qq_3 ...
- monkey详解
Monkey是Android系统自带的一个命令行工具,用户主要是通过adb命令来启动Monkey,Monkey在运行时,会根据命令行参数的配置,生成伪随机事件流,并在Android设备上执行对应的测试 ...
- 【Linux开发】linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟
linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- c++ | size_t
1.size_t的定义 size_t是一种数据相关的无符号类型,它被设计得足够大以便能够内存中任意对象的大小. 在cstddef头文件中定义了size_t类型,这个文件是C标准库stddef.h头文件 ...
- Net 文件和流 I/O
文件和流 I/O 2017/03/30 文件和流 I/O(输入/输出)是指在存储媒介中传入或传出数据. 在 .NET Framework 中,System.IO 命名空间包含允许以异步方式和同步方式对 ...
- poj1050-最大子矩阵(dp)
链接:http://poj.org/problem?id=1050 题意:给定n*n的矩阵,求和最大的子矩阵. 思路:我们将二维矩阵降维至一维,即将第i行到第j行的所有列压缩成一行,我们可以在线性时间 ...
- <<大道至简>>伪代码
import.java.大道至简.* public class YuGong { public static void main(String [] args) throws IOException ...
- P3376 网络流-最大流模板题(Dinic+当前弧优化)
(点击此处查看原题) Dinic算法 Dinic算法相对于EK算法,主要区别在于Dinic算法对图实现了分层,使得我们可以用一次bfs,一次dfs使得多条增广路得到增广 普通的Dinic算法已经可以处 ...
- # Tallest Cows(差分)
Tallest Cows(差分) n头牛,给出最高牛的位置和身高,其他牛身高未知,给出m对相对关系,表示可以相互看见当且仅当他们中间的牛都比他们矮.求每头牛身高最大值是多少. 差分数组的性质:前缀和为 ...