python字典、集合

python字典、集合 1

1. Python 字典 2

1.1. 字典基础 2

1.2. 访问字典里的值 2

1.2.1. 实例 3

1.2.2. 输出结果 3

1.3. 修改字典 3

1.3.1. 实例 3

1.3.2. 输出结果 3

1.4. 删除字典元素 4

1.4.1. 实例 4

1.5. 字典键的特性 4

1.6. 字典内置函数&方法 5

1.7. 获取字典最大值及最大值的键 5

1.8. 字典字段的比较 6

1.9. dict.keys返回的不是list 6

2. Python 集合 7

2.1. 集合推导式 7

2.2. 集合基础 7

2.3. 添加元素 8

2.4. 移除元素 9

2.5. 计算集合元素个数 10

2.6. 清空集合 10

2.7. 判断元素是否在集合中存在 10

2.8. s.update( "字符串" ) 与 s.update( {"字符串"} ) 的区别 11

2.9. 集合set.pop方法删除元素感想 11

2.10. 使用集合对列表和元组去重 13

2.11. 去重的连个局限性 13

2.12. 消灭去重的两个局限性 13

  1. Python 字典

    1. 字典基础

字典是另一种可变容器模型,且可存储任意类型对象.

字典的每个键值(key,value)对用冒号(:)分隔,每个对之间用逗号(,)分隔,整个字典包括在花括号({})中,格式如下:

d={key1:value1,key2:value2}

键必须是唯一的,但值则不必.

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组.

  1. 访问字典里的值

吧相应的键放入到方括号中

  1. 实例

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

print ("dict['Name']: ", dict['Name'])

print ("dict['Age']: ", dict['Age'])

  1. 输出结果

dict['Name']:  Runoob

dict['Age']:  7

  1. 修改字典

向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对

  1. 实例

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

dict['Age'] = 8;               # 更新 Age

dict['School'] = "菜鸟教程"  # 添加信息

print ("dict['Age']: ", dict['Age'])

print ("dict['School']: ", dict['School'])

  1. 输出结果

dict['Age']:  8

dict['School']:  菜鸟教程

  1. 删除字典元素

能删单一的元素也能清空字典,清空只需一项操作.

显示删除一个字典用del命令.

  1. 实例

dict1 = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

del dict1['Name'] # 删除键 'Name'

dict1.clear()     # 清空字典

del dict 1        # 删除字典

print ("dict1['Age']: ", dict1['Age'])

print ("dic1t['School']: ", dict1['School'])

但这回引发一个异常,因为最后一个del操作后,字典不存在

Traceback (most recent call last):

File "test.py", line 9, in <module>

print ("dict['Age']: ", dict['Age'])

TypeError: 'type' object is not subscriptable

  1. 字典键的特性

字典值可以是任何的python对象,既可以是标准的对象,也可以使用户定义的,但键不行.

注意:

1.不允许同一个键出现两次.创建时如果同一个键被赋值两次,后一个值会被记住,即前一个该键的值会被代替.

2.键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行.

dict = {['Name']: 'Runoob', 'Age': 7}

print ("dict['Name']: ", dict['Name'])

以上实例输出结果:

Traceback (most recent call last):

File "test.py", line 3, in <module>

dict = {['Name']: 'Runoob', 'Age': 7}

TypeError: unhashable type: 'list'

  1. 字典内置函数&方法

字典内置函数len(dict):计算字典元素个数,即键的总数.

str(dict):输出字典,以可打印的字符串表示.

type(varible):返回输入的变量类型,如果变量是字典就返回字典类型,可以用来判断数据类型,type通用,后会细讲.

字典内置方法clear():删除字典内所有元素.

copy():返回一个字典的浅赋值.

fromkeys(seq):创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值.一般seq都是一个列表、元组,如果seq我们写成字典,则会把字典里的键取出来用作新字典的键.并且新建的字典不是原来的字典.

get(key,default=None):返回指定键的值,如果值不存在字典中返回default值.

key in dict:如果键在字典dict里返回true,否则返回false

items():以列表返回可遍历的(键,值)元组数组.

keys():返回一个迭代器,可以使用list()来转化为列表

setdefault(key,default=None):和get()类似,但如果键不存在于字典中,将会添加键并将至设为default.

update(dict2):把字典dict2的键/值对更新到dict里

values():返回一个迭代器,可以使用list()来转化为列表

pop(key[,default]):删除字典给定键key所对应的值,返回值为被删除的值.key值必须给出,否则,返回default值.

popitem():随机返回并删除字典中的一对键和值(一般删除末尾对).

  1. 获取字典最大值及最大值的键

字典可以通过以下方法调换 key和 value,当然要注意原始 value 的类型,必须是不可变类型:

dic = {

'a': 1,

'b': 2,

'c': 3,

}

reverse = {v: k for k, v in dic.items()}

原理是通过zip把字典的键值对压缩成一个迭代器,然后使用max获取迭代器中最大的值.

print(dic)

print(reverse)

输出如下:

{'a': 1, 'b': 2, 'c': 3}

{1: 'a', 2: 'b', 3: 'c'}

  1. 字典字段的比较

获取字典中最大的值及其键:

prices = {

'A':123,

'B':450.1,

'C':12,

'E':444,

}

max_prices = max(zip(prices.values(), prices.keys()))

print(max_prices) # (450.1, 'B')

  1. dict.keys返回的不是list

Python3.x 中会碰到这样的问题:

>>> sites_link = {'runoog':'runoob.com', 'google':'google.com'}

>>> sides = sites_link.keys()

>>> print(sides[0])

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: 'dict_keys' object does not support indexing

>>>

原因说明及解决方法:

dict.values()

dict.keys()

在 python2.x dict.keys 返回一个列表,但是在在 Python 3.x 下,dict.keys 返回的是 dict_keys 对象,若需要转换为列表,请使用:

list(dict.values())

list(dict.keys())

修改上面实例:

>>> sites_link = {'runoog':'runoob.com', 'google':'google.com'}

>>> sides = sites_link.keys()

>>> list(sides)

['runoog', 'google']

>>>

  1. Python 集合

    1. 集合推导式

>>>a = {x for x in 'abracadabra' if x not in 'abc'}

>>> a

{'r', 'd'}

  1. 集合基础

集合是一个无序不重复元素的序列.

可以使用大括号{}或者set()函数创建集合,注意:创建一个空集合必须用set()而不是{},因为{}是用来创建一个字典.

>>>basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}

>>> print(basket)                      # 这里演示的是去重功能

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

>>> 'orange' in basket                 # 快速判断元素是否在集合内

True

>>> 'crabgrass' in basket

False

>>> # 下面展示两个集合间的运算.

...

>>> a = set('abracadabra')

>>> b = set('alacazam')

>>> a

{'a', 'r', 'b', 'c', 'd'}

>>> a - b                              # 集合a中包含元素

{'r', 'd', 'b'}

>>> a | b                              # 集合a或b中包含的所有元素

{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}

>>> a & b                              # 集合a和b中都包含了的元素

{'a', 'c'}

>>> a ^ b                              # 不同时包含于a和b的元素

{'r', 'd', 'b', 'm', 'z', 'l'}

  1. 添加元素

语法格式如下:

s.add( x )

将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。

实例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao"))

>>> thisset.add("Facebook")

>>> print(thisset)

{'Taobao', 'Facebook', 'Google', 'Runoob'}

还有一个方法,也可以添加元素,且参数可以是列表,元组,字典等,语法格式如下:

s.update( x )

x 可以有多个,用逗号分开。

实例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao"))

>>> thisset.update({1,3})

>>> print(thisset)

{1, 3, 'Google', 'Taobao', 'Runoob'}

>>> thisset.update([1,4],[5,6])

>>> print(thisset)

{1, 3, 4, 5, 6, 'Google', 'Taobao', 'Runoob'}

>>>

  1. 移除元素

语法格式如下:

s.remove( x )

将元素 x 添加到集合 s 中移除,如果元素不存在,则会发生错误。

实例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao"))

>>> thisset.remove("Taobao")

>>> print(thisset)

{'Google', 'Runoob'}

>>> thisset.remove("Facebook")   # 不存在会发生错误

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

KeyError: 'Facebook'

>>>

此外还有一个方法也是移除集合中的元素,且如果元素不存在,不会发生错误。格式如下所示:

s.discard( x )

实例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao"))

>>> thisset.discard("Facebook")  # 不存在不会发生错误

>>> print(thisset)

{'Taobao', 'Google', 'Runoob'}

我们也可以设置随机删除集合中的一个元素,语法格式如下:

s.pop()

实例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao", "Facebook"))

>>> thisset.pop()

'Taobao'

>>> print(thisset)

{'Facebook', 'Google', 'Runoob'}

  1. 计算集合元素个数

语法格式如下:

len(s)

计算集合 s 元素个数。

实例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao"))

>>> len(thisset)

3

  1. 清空集合

语法格式如下:

s.clear()

清空集合 s。

实例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao"))

>>> thisset.clear()

>>> print(thisset)

set()

  1. 判断元素是否在集合中存在

语法格式如下:

x in s

判断元素 s 是否在集合 x 中存在,存在返回 True,不存在返回 False。

实例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao"))

>>> "Runoob" in thisset

True

>>> "Facebook" in thisset

False

>>>

  1. s.update( "字符串" ) 与 s.update( {"字符串"} ) 的区别

s.update( "字符串" ) 与 s.update( {"字符串"} ) 含义不同:

s.update( {"字符串"} ) 将字符串添加到集合中,有重复的会忽略。

s.update( "字符串" ) 将字符串拆分单个字符后,然后再一个个添加到集合中,有重复的会忽略。

>>> thisset = set(("Google", "Runoob", "Taobao"))

>>> print(thisset)

{'Google', 'Runoob', 'Taobao'}

>>> thisset.update({"Facebook"})

>>> print(thisset)

{'Google', 'Runoob', 'Taobao', 'Facebook'}

>>> thisset.update("Yahoo")

>>> print(thisset)

{'h', 'o', 'Facebook', 'Google', 'Y', 'Runoob', 'Taobao', 'a'}

>>>

  1. 集合set.pop方法删除元素感想

集合用 set.pop() 方法删除元素的不一样的感想如下:

1、对于 python 中列表 list、tuple 类型中的元素,转换集合是,会去掉重复的元素如下:

>>> list = [1,1,2,3,4,5,3,1,4,6,5]

>>> set(list)

{1, 2, 3, 4, 5, 6}

>>> tuple = (2,3,5,6,3,5,2,5)

>>> set(tuple)

{2, 3, 5, 6}

2、集合对 list 和 tuple 具有排序(升序),举例如下:

>>> set([9,4,5,2,6,7,1,8])

{1, 2, 4, 5, 6, 7, 8, 9}

>>> set([9,4,5,2,6,7,1,8])

{1, 2, 4, 5, 6, 7, 8, 9}

3、集合的 set.pop() 的不同认为

有人认为 set.pop() 是随机删除集合中的一个元素、我在这里说句非也!对于是字典和字符转换的集合是随机删除元素的。当集合是由列表和元组组成时、set.pop() 是从左边删除元素的如下:

列表实例:

set1 = set([9,4,5,2,6,7,1,8])

print(set1)

print(set1.pop())

print(set1)

输出结果:

{1, 2, 4, 5, 6, 7, 8, 9}

1

{2, 4, 5, 6, 7, 8, 9}

元组实例:

set1 = set((6,3,1,7,2,9,8,0))

print(set1)

print(set1.pop())

print(set1)

输出结果:

{0, 1, 2, 3, 6, 7, 8, 9}

0

{1, 2, 3, 6, 7, 8, 9}

  1. 使用集合对列表和元组去重

首先把列表和元组转成集合,集合会自动去重,但是因为集合有自动排序的功能,所以这个时候列表和元组的元素

的位置是发生了变化的,即被集合自动排序了.

  1. 去重的连个局限性

1、不能保证原来的顺序

l = [1,1,1,1,'egon','alex','egon']

s = set(l)

print(s) # {'egon', 1, 'alex'}

l = list(s)

print(l) # ['egon', 1, 'alex']

2、不能针对可变类型去重

l = [1,1,1,1,'egon','alex','egon',{'a':1}]

s = set(l)

print(s) # 报错

  1. 消灭去重的两个局限性

info = [

{'name':'egon', 'age':18},

{'name':'alex', 'age':73},

{'name':'egon', 'age':18},

{'name':'lxx', 'age':19},

]

l = []

for dic in info:

if dic not in l:

l.append(dic)

# l = [

{'name':'egon', 'age':18},

{'name':'alex', 'age':73},

{'name':'lxx', 'age':19},

]

python字典、集合相关推荐

  1. 3、Python字典集合

    2.3字典 字典是键值对的无序可变序列.键值之间用冒号隔开,相邻元素之间用逗号隔开,所有元素放在大括号之间{},键可以是Python中所有不可变的数据,不能用列表.元组.字典作为字典的键,键不可重复, ...

  2. python字典(dict)+常用方法操作+列表、元组、集合、字典的互相转换

    python字典(dict)+常用方法操作+列表.元组.集合.字典的互相转换 字典也是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据. 为了保存具有映射关系的数据,Python ...

  3. python中列表 元组 字典 集合的区别

    参考文章:python中列表 元组 字典 集合的区别

  4. Python字典和集合

    Python字典(Dict)和集合(set): 字典(Dict):使用键值(key - value)存储,通过key查找value的速度非常快. 集合(Set):拥有不重复的元素,无顺序 字典的特点: ...

  5. python set集合_Python字典(dict)和集合(set)

    想必大家都有查字典的经历吧,让我们再回顾一下查字典的步骤:根据拼音或者边旁找到这个字,然后翻到这个字对应的页数,就能看到这个字的详细解释啦. Python字典(dict)其实也是差不多的概念,在字典( ...

  6. python列表元组字典集合实验心得_python学习小总结(列表、元组、字典、集合、字符串)...

    ---恢复内容开始--- 一.列表(list) 1.添加 append():追加,在列表末尾添加元素. 列表名.append(添加的元素) extend():扩展,在列表末尾添加元素. 列表名.ext ...

  7. python的集合和字典

    python的集合和字典基础部分 因为python里面集合set以及字典dict既有联系,又相互区别,所以放在一起谈谈基础的部分 文章目录 python的集合和字典基础部分 前言 一.集合字典的定义 ...

  8. SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理

    SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理 本文连接 简介 SIGIA_4P 网址 a. 课程OKR Objectives and ...

  9. Python学习第七课-元组字典集合

    Python学习第七课-元组&字典&集合 一.元组 1.1元组简介 1.2元组的拆包 1.3字符串拆包 1.4列表的拆包 1.5拆包练习 二.字典的简介 2.1介绍 2.2操作 三.字 ...

最新文章

  1. Leecode 1583.统计不开心的朋友
  2. asin c语言中 返回值范围_大学C语言考试易错知识点总结
  3. 文本分类和序列标注“深度”实践
  4. weblogic与sitemesh乱码问题
  5. 他为华裔写了几封信......
  6. jq获取下拉列表_jQuery下拉框操作系列$(option:selected,this) (锋利的jQuery)
  7. android 55
  8. Android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)
  9. 动态添加TemplateField列
  10. OpenLayers之官网实例
  11. C语言视频教程-谭浩强版-小甲鱼主讲—P1
  12. bootdo图片上传
  13. ios手机怎么连接adb命令_Mac连接Adb
  14. 华氏和摄氏温度的转换
  15. lighttpd http响应报文(Response)增加安全头Referrer-Policy和X-Permitted-Cross-Domain-Policies方法
  16. html 怎么在背景图片上添加内容,css 如何在一个背景图片的中间添加文字呢?
  17. 浏览器(网页浏览器)
  18. HTML常用颜色RGB值
  19. 关于google smtp邮件发送
  20. 【IDEA】idea 调试技巧 异常断点 断点之前显示异常字段

热门文章

  1. 2.授之以渔--自由
  2. 交易员的胖手指导致美股暴跌
  3. 当你想要成为一名IC设计工程师时,不妨先看看这篇文章
  4. 基于seetaface2实现Java人脸对比、人脸搜索
  5. Hive之解析Json数组
  6. pandas绘图详细教程
  7. 在U盘下安装ubuntu20.04,从U盘启动Linux系统
  8. 微信小程序——传统开发模式与云开发模式对比
  9. 计算机基础说课流程ppt,xx杯说课大赛计算机应用基础类一等奖作品:电子表格处理软件应用教学课件.ppt...
  10. Living Green 宜居国家(城市)