python字典、集合

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},

]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值