Table of Contents generated with DocToc

ditctaionary and set

hash 介绍

hash是计算机中非常常见一种查找的手法,它可以支持常数时间的insert、remove、find,但是对于findMin、findMax、sort等操作就支持的不是很好,具体是为什么呢;

hash其实是通过key来找value的,可以这样简单的理解为value都被存在一个数组之中,每次你用key计算一下可以得到相应数组的下标,即 index=f(key) 是不是一下子就找到元素所在位置了呢!

集合-set

集合(set)是一类容器,元素没有先后顺序,并且元素的值不重复。

集合的字面量用花括号{}

eg:

{1,5,7}

{'apple', 'orange', 'pear', 'banana'}

创建

直接给变量赋值一个集合字面量

fruit = {'apple', 'orange', 'pear', 'banana'}

使用set()创建一个空集合

emp = set()

注:emp = {} #创建一个空字典

使用set()将列表或元组转换成集合

prime = set([1,3,5,7,11])

结果是:

{1, 3, 5, 7, 11}

操作和访问集合的元素

可以用add()和remove()添加和删除集合元素

可以用min()、max()、len()和sum()对集合操作。

集合内的元素是无序的,所以不能像列表那样通过下标来访问集合元素。

用循环实现遍历集合中的各个元素

s = {2,3,5,7,11}

for i in s:

print(i,end='')

#输出:

#235711

运算符in和not in 用于判断某个元素是否在集合中。

s = {2,3,5,7,11

print(5 in s)

print(4 not in s)

输出:

True

True

子集、超集、相对判断

如果集合s1中的元素,同样都在集合s2中,则称s1为s2的子集,s2为s1的超集。

使用s1.issubset(s2)来判断s1是否为s2的子集。

使用s2.issuperset(s1)来判断s1是否为s2的超集。

s1 = {2,3,5,7}

s2 = {1,2,3,4,5,6,7}

print(s1.issubset(s2))

print(s2.issuperset(s1))

输出:

True

True

使用关系运算符==和!=

- 判断2个集合包含的元素完全相同与否。

使用关系运算符<,<=,>,>=。

- 如果s1是s2的真子集,则s1

- 如果s1是s2的子集,则s1<=s2是True

- 如果s1是s2的真超集,则s1>s2是True

- 如果s1是s2的超集,则s1>=s2是True

- 注:s1是s2的真子集的意思是s1是s2的子集,但是s2中至少有一个s1中不存在的元素; s1是s2的真超集的意思是s1是s2的超集,但是s1中至少有一个s2中不存在的元素。

通过集合的函数或运算符进行集合的并集、交集、差集和对称差的集合运算。

运算

函数

运算符

说明

并集

union()

|

同数学中的并集

交集

intesection()

&

同数学交集

差集

difenrence()

-

s1-s2出现在s1不出现在s2

对称差

symmertric_diference()

^

s1^s2=s1

字典-dictionary (map)

字典是一个用“键”做索引来存储的数据的集合。一个键和它所对应的数据形成字典中的一个条目。字典的key是用来做hash运算的,需要不可变对象,如数字、字符串、元组;可变的对象不可以作为key,如list、dictionary、set

创建字典

用花括号{ } 来表示,每个元素用冒号分隔键和数据。可以用{}或者dict()来创建空字典。

students = {3180101:’张三’, 3180102:’李四’, 3180105:’王五’, 3180110:’赵六’}

d={'math': '0001', 'python': '0002', 'c': '0003'}

d=dict([("math","0001"),("python","0002"),("c","0003")])

d=dict(math="0001",python="0002",c="0003")

字典的基本运算

访问和修改条目

直接用[ ]运算符,用<字典> [键]的形式,访问键所对应的数据。

score = {'张三':78, '李四':92}

print(score['张三'])#访问score中键为'张三'的数据

score['李四'] = 89#把score中键为'李四'的数据修改为89

score['王五'] = 100#score中没有键为‘王五’的元素,则增加一项,键为’王五’,数据为100。

print(score)

输出:

78

{'张三': 78, '李四': 89, '王五': 100}

删除条目

del dictName[key]

如果key不存在,会抛出KeyError异常

遍历字典

# 循环

score = {'张三':78, '李四':92, '王五':89}

for name in score:

print(name + ':' + str(score[name]))

#用items()

for key,value in score.items():

print(key + ':' + str(value))

输出:

张三:78

李四:92

王五:89

字典的大小len()

检测,in 和not in检测key是否在字典中

用==和!=比较2个字典是否相同(键和值都相同)

字典常用函数

函数

说明

keys()

返回由全部key组成的序列

values()

返回由全部值组成的序列

items()

返货一个序列,每一项都是一个tuple,(key,value)

clear()

删除所有条目

get(key,value)

返回这个键所对应的值,如找不到返回value

pop(key)

返回这个键所对应的值,同时删除这个条目

可变对象和不可变对象

可变对象和不可变对象是Python语言的核心概念。

不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。

可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址。

不可变数据类型创建不可变对象,可变数据类型创建可变对象

可变类型有:列表、集合、字典

不可变类型有:整数、浮点数、复数、字符串、逻辑量(True False)、元组

不同数据类型对象和逻辑值的变换

数据类型

True

False

整数

非0

0

浮点数

非0

0.0

复数

非0

0+0j

字符串

非空

""

逻辑量

True

False

列表

非空

[]

元组

非空

()

集合

非空

set()

字典

非空

{}

应用

set

列表去重

#去重,但不能保证保持原有顺序

mailto = ['cc', 'bbbb', 'afa', 'sss', 'bbbb', 'cc', 'shafa']

addr_to =list(set(mailto))

print(addr_to)

#result ['shafa', 'cc', 'sss', 'afa', 'bbbb']

#排序后保证保持原有顺序

addr_to.sort(key = mailto.index)

print(addr_to)

#result ['cc', 'bbbb', 'afa', 'sss', 'shafa']

找鞍点

n=int(input())

a=[]

for i in range(0,n):

b=input().split()

a.insert(i,b)

c=[]

d=[]

for i in range(0,n):

maxa=max(int(a[i][j]) for j in range(n))

mina=min(int(a[k][i]) for k in range(0,n))

c+=[(i,j) for j in range(n) if int(a[i][j])==maxa]

d+=[(k,i) for k in range(n) if int(a[k][i])==mina]

c=list(set(c)&set(d))

if (c!=[]):

print(c[0])

else:

print("NONE")

dictionary

字典替代分支语言

#输入一个1到7的数字,输出对应的星期名的缩写

days={1:"Mon",2:"Tue",3:"Wed",4:"Thu",5:"Fri",6:"Sat",7:"Sun"}

num=int(input())

print(days[num])

result={"+":"x+y","-":"x-y","*":"x*y","/":'''x/y if y!=0 \

else "divided by zero"'''}

x=int(input())

z=input().strip()

y=int(input())

r=eval(result.get(z))#计算表达式的值

if type(r)!=str:

print(format(r,'.2f'))

else:

print(r)

字典计数

eg:1

#输入一行字符,求字符”a”,”b”和”c”出现的次数

diccount={char:0 for char in "abc"} #字典初始化

s=input()

lst=[char for char in s if

ord("a")<=ord(char)<=ord("c")]

for char in lst:

diccount[char]+=1

print(diccount)

eg2:

#输入一行字符,求每个字符出现的次数

#建字典dicchar,键是字符,值是字符出现的次数。由于不能预知出现哪些字符,所以不能预先初始化字典

#注意字典的get函数:get() 函数返回指定键的值,如果值不在字典中返回默认值。countchar.get(c,0)函数返回键为c的值, 不在字典中返回0。

str=input()

countchar={}

for c in str:

countchar[c]=countchar.get(c,0)+1

print(countchar)

eg:

#求列表中两数之和等于指定数的下标

'''

Given nums = [2, 11,7, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,

return [0, 2].

'''

nums = [2, 6, 11, 15,7,8]

target = 9

hm = dict()

for i in range(len(nums)):

if nums[i] in hm:

print(hm[nums[i]], i)

break

hm[target - nums[i]] = i

print([2, 6, 11, 15,7,8])

print(hm)

字典列表嵌套

books=[

{"name":u"C#从入门到精通","price":25.7,"store":u"卓越"},

{"name":u"ASP.NET高级编程","price":44.5,"store":u"卓越"},

{"name":u"Python核心编程","price":24.7,"store":u"当当"},

{"name":u"JavaScript大全","price":45.7,"store":u"当当"},

{"name":u"Django简明教程","price":26.7,"store":u"新华书店"},

{"name":u"深入Python","price":55.7,"store":u"新华书店"},

]

print(min([item["price"] for item in books ]))

#24.7

books[0]['name']

#C#从入门到精通

字典嵌套

users = {'aeinstein': {'first': 'albert',

'last': 'einstein',

'location': 'princeton'},

'mcurie': {'first': 'marie',

'last': 'curie',

'location': 'paris'},

}

for username, user_info in users.items():

print("\nUsername: " + username)

full_name = user_info['first'] + " " + user_info['last']

location = user_info['location']

print("\tFull name: " + full_name.title())

print("\tLocation: " + location.title())

'''

Username: aeinstein

Full name: Albert Einstein

Location: Princeton

Username: mcurie

Full name: Marie Curie

Location: Paris

'''

图和字典

# %% 求图的顶点数,边数,边的总长 空字典{},空集合 set()

d={"start": {1:1,2:2,3:4}, #第一个点为“start”,一条边指向1,长度为1,一条指向2,长度为2,一条指向3,长度为4

1:{3:5},

2:{"end":8,3:78},

3:{2:4,"end":8},

"end":{} }

v=set(); e=set() ;s=0 #顶点的集合,边点的集合

for key,value in d.items():

v.add(key)

if type(value)==dict:

for key1,value1 in value.items():

v.add(key1)

e.add((key,key1))

s+=value1

print(len(v),len(e),s)

#5 8 110

组装字典

id = "IAD"

location = "Dulles Intl Airport"

max_temp = 32

min_temp = 13

precipitation = 0.4

print("{id:3s} : {location:19s} : {max_temp:3d} / {min_temp:3d} /{precipitation:5.2f}".format(

id=id, location=location, max_temp=max_temp,

min_temp=min_temp, precipitation=precipitation))

data = dict(

id=id, location=location, max_temp=max_temp,

min_temp=min_temp, precipitation=precipitation

)

print("{id:3s} : {location:19s} : {max_temp:3d} / {min_temp:3d} /{precipitation:5.2f}".format_map(data))

#IAD : Dulles Intl Airport : 32 / 13 / 0.40

#IAD : Dulles Intl Airport : 32 / 13 / 0.40

#date={'id': 'IAD', 'location': 'Dulles Intl Airport', 'max_temp': 32, 'min_temp': 13, 'precipitation': 0.4}

参考文档

注:如有侵权联系作者删帖

python字典和集合对象可以进行索引操作吗_python 集合(set)和字典(dictionary)的用法解析...相关推荐

  1. python字典和集合对象可以进行索引操作_建议收藏丨纯知识点:Python基础—字典、集合操作大全...

    本文为纯知识点,预计需阅读二十分钟 数据结构基本上就是--它们是可以处理一些 数据 的 结构 .或者说,它们是用来存储一组相关数据的. 在Python中有四种内建的数据结构--列表.元组和字典,集合. ...

  2. python字典和集合对象可以进行索引操作_Python中的字典跟集合整理笔记

    泛映射类型 映射类型:不仅仅是dict,标准库里的所有映射类型都是利用dict来实现的,因此它们有个共同的限制,即只有可散列的数据类型才能用做这些映射的键.(只有键有这个需求,值并不需要必须是可散列的 ...

  3. python字典和集合对象可以进行索引操作_python字典和列表的高级应用

    1.将序列分解为单独的变量 1.1问题 包含n个元素的元组或列表.字符串.文件.迭代器.生成器,将它分解为n个变量 1.2方案 直接通过赋值操作 要求:变量个数要等于元素个数 当执行分解操作时,有时需 ...

  4. Python 数据分析三剑客之 Pandas(二):Index 索引对象以及各种索引操作

    CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...

  5. python字典和集合对象可以进行索引_Python字典和集合

    1.泛映射类型 collections.abc 模块中有 Mapping 和 MutableMapping 这两个抽象类,他们的作用是为dict和其他类似的类型定义形式接口. 标准库里所有映射类型都是 ...

  6. python字典和集合对象可以进行索引_python集合和字典

    Python也包含有 集合 类型.集合是由不重复元素组成的无序的集.它的基本用法包括成员检测和消除重复元素.python集合对象也支持像 联合,交集,差集,对称差分等数学运算. 花括号或 set() ...

  7. python的内置对象有哪些、列举说明_Python内置对象汇总

    内置对象方法汇总 常用内置对象的方法 String 定义,切片,长度,替换,编列..... 列表/元组 定义,使用,循环遍历...... 字典 定义,使用,循环遍历....... 集合Set 连接数据 ...

  8. python绘制饼状图图例_python matplotlib饼状图参数及用法解析

    这篇文章主要介绍了python matplotlib饼状图参数及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在python的matplo ...

  9. java中集合什么时候有索引,JavaSE中Collection集合框架學習筆記(1)——具有索引的List...

    前言:因為最近要重新找工作,Collection(集合)是面試中出現頻率非常高的基礎考察點,所以好好惡補了一番. 復習過程中深感之前的學習不系統,而且不能再像剛畢業那樣死背面試題,例如:String是 ...

最新文章

  1. 在网络通讯中,如何自己分配可用的端口号和获取自己的ip地址
  2. Blender全流程制作真实感3D产品学习教程
  3. 工坊专访|2020智博会,AR、VR、智能驾驶是亮点
  4. python xlwings下载_Python学习随笔:使用xlwings读取和操作Execl文件
  5. php分目录存放session,phpsession实现多级目录存放实现代码,phpsession_PHP教程
  6. 声速的测量的实验原理和应用_CEMS烟气在线分析仪测量原理计经典应用
  7. centos 等保三级_等保测评三级整改-身份鉴别
  8. 【NLP】语义角色标注(Semantic Role Labelling)
  9. UJAM Beatmaker VICE for Mac(80年代风格鼓机插件)
  10. 特殊ip地址汇总!!!
  11. Java编程英语单词大全_java编程常用英语单词
  12. 如何搜集你想要的信息
  13. API和SDK是什么?有什么区别?如何测试SDK?一篇文章统统告诉你!
  14. Python的数据分析可视化十种技能总结
  15. 牛顿迭代法解线性方程matlab程序,牛顿迭代法matlab程序(解线性方程组)
  16. 李宗盛——给自己的歌,两个版本吉他谱
  17. 精益生产25个必备工具!
  18. 【Web-南邮CTF】Web-CTF入门第1天
  19. YYCMS搭建影视网站教程
  20. IntelliJ IDEA开发工具的完成

热门文章

  1. 厉害了!数据安全智能守护神UEBA(用户实际行为分析)
  2. 那些不甘平庸的管理者,都在读这10本书
  3. 高仿大企业简洁响应电子商务网站模板 带后台 自适应版本 安卓+PC
  4. 能干还是作死——从蜉蝣般的百度云商城谈起
  5. 02 -02 36kr项目
  6. 细节决定成败,人生要注意的50个细节
  7. aspen吸收塔气液比优化_使用 Aspen Plus 优化环氧乙烷吸收塔
  8. 关于UltraIso的U+隐藏分区
  9. 利用jQuery插件扩展识别浏览器内核与外壳的类型和版本
  10. 金融机构电子签应用汇总:覆盖7类组织的30多种签署需求