Python基础5——字典(dict)与集合(set)

字典和集合都是散列表,也就是无序。
字典是Python中唯一内建的映射类型。字典中的值并没有特殊的顺序,但是都存储在一个特定的键(key)下。键可以是数字,字符串,甚至是元组。

5.1创建字典

dict 字典由一系列的键值对构成 dict ={key:value}:

d = {'Marry':110,'Mac':120,'Honey':130}

字典特点:
- 字典中键是唯一的,值不是唯一的。因为键是值的标识。重复的话会重新赋值。
- 无序

字典的取值速度要比列表快,因为列表是顺序的,所以我们在查找的时候就要一个个去找,但是对于字典来说,我们只要知道键就可以立马将我们想要的数据找出来。

5.2字典的使用

5.2.1dict函数
可以用dict函数,通过其他映射(比如其他字典)或者(键、值)对的序列建立字典。

>>> items = [('name','Marry'),('age',24)]
>>> d = dict(items)
>>> d
{'name': 'Marry', 'age': 24}
>>> d['name']
'Marry'

dict也可以通过关键字参数来创建字典:
dict(key=value)

>>> d = dict(name='Gumby', age=24)
>>> d
{'name': 'Gumby', 'age': 24}

字典数据的添加和取值:

dict[key] = value            # 如果key存在的话则修改对应的值,反之则添加这对数据

5.2.2字典的基本操作

字典具有之前提到的一些序列的所有基本操作:len、max、min、in、索引取值、del
字典虽然和列表有很多特性相同,但也有下面一些重要的区别:

  • 键类型:字典的键不一定为整型数据,可以是任意的不可变类型。比如浮点型,字符串,元组。
  • 自动添加:list只能通过append函数进行列表的扩展(列表不能给位置不存在的变量进行赋值),但是dict可以直接通过赋值的方式进行扩展(dict[key] = value )。
  • in,in查找的是键而不是值。

5.2.3字典方法
(1)clear
清空字典,这个是原地操作没有返回值。

>>> d = {}
>>> d['name'] = 'Marry'
>>> d
{'name': 'Marry'}
>>> d.clear()
>>> d
{}

(2)copy
返回一个具有相同键-值对的新字典(浅复制)。
简单说,其实浅复制只复制了变量没有复制对象,也就是复制完了变量虽然被复制了名称上改变了,但是指向的对象没有变,所以替换值的时候对原字典没有影响(相当于变量又重新指向了别的对象,但是原字典中的变量还是指向原来的对象),修改值的时候就有影响了(修改的时候修改的是原对象中的内容,所以原字典也会受到影响)。

>>> d
{'machines': ['foo', 'bar', 'baz'], 'username': 'admin'}
>>> c = d.copy()
>>> c
{'machines': ['foo', 'bar', 'baz'], 'username': 'admin'}
>>> c['username'] = 'min'
>>> c
{'machines': ['foo', 'bar', 'baz'], 'username': 'min'}
>>> c['machines'].pop()
'baz'
>>> c
{'machines': ['foo', 'bar'], 'username': 'min'}
>>> d
{'machines': ['foo', 'bar'], 'username': 'admin'}

深复制可以使用:copy模块的deepcopy函数。不仅复制变量还复制变量所指向的对象完全复制并开辟空间进行存放。

>>> import copy
>>> b = copy.deepcopy(d)
>>> b
{'machines': ['foo', 'bar'], 'username': 'admin'}
>>> b['machines'].pop()
'bar'
>>> b
{'machines': ['foo'], 'username': 'admin'}
>>> d
{'machines': ['foo', 'bar'], 'username': 'admin'}    #就不会影响原字典了

(3)fromkeys:
使用给定的键建立新的字典,每个键都对应一个默认的值None。

>>> {}.fromkeys(['name','age'])
{'name': None, 'age': None}
>>> d
{'machines': ['foo', 'bar'], 'username': 'admin'}
>>> d.fromkeys(['name','age'])
{'name': None, 'age': None}        #返回一个新建立的字典但是不会对d产生影响
>>> d
{'machines': ['foo', 'bar'], 'username': 'admin'}  

值默认是None,但是可以提供自己的默认值

>>> d.fromkeys(['name','age'],('Marry'))
{'name': 'Marry', 'age': 'Marry'}

(4)get:访问字典
d.get(key) : 如果key存在返回key对应的value,反之返回None,不抛出异常
d.get(key,x) : x用来指定若是key不存在返回的信息

>>> d
{'machines': ['foo', 'bar'], 'username': 'admin'}
>>> d.get('username')
'admin'
>>> print(d.get('name'))
None
>>> d.get('user','key is not found')    #或者在后面指定如果key不存在时返回的信息
'key is not found'

(5)items:返回字典中的各个项

>>> d
{'machines': ['foo', 'bar'], 'username': 'admin'}
>>> d.items()
dict_items([('machines', ['foo', 'bar']), ('username', 'admin')]) 
>>> list(d.items())
[('machines', ['foo', 'bar']), ('username', 'admin')]

(6)keys:以列表的形式返回key

>>> d
{'machines': ['foo', 'bar'], 'username': 'admin'}
>>> d.keys()
dict_keys(['machines', 'username'])

(7)value:以列表形式返回values

>>> d
{'machines': ['foo', 'bar'], 'username': 'admin'}
>>> d.values()
dict_values([['foo', 'bar'], 'admin'])

(8)pop:移除
pop(k):移除并返回键K所对应的键值对,不存在抛出异常
pop(k,x):移除并返回键K所对应的键值对,不存在返回x

>>> d
{'machines': ['foo', 'bar'], 'username': 'admin'}
>>> d.pop('user')
Traceback (most recent call last):
  File "<pyshell#110>", line 1, in <module>
    d.pop('user')
KeyError: 'user'
>>> d.pop('user','key is not found')
'key is not found'
>>> d.pop('username')
'admin'
>>> d
{'machines': ['foo', 'bar']}

(9)popitem :和pop很像,但是popitem没有参数,所以随机删除,返回删除的项

>>> d = {'machines': ['foo', 'bar'], 'username': 'admin','age':24,'home':'beijing'}
>>> d.popitem()
('home', 'beijing')
>>> d.popitem()
('age', 24)
>>> {}.popitem()     #空字典时报错
Traceback (most recent call last):
  File "<pyshell#129>", line 1, in <module>
    {}.popitem()
KeyError: 'popitem(): dictionary is empty'

(10)setdefault :和get很像
用于查找,若存在返回对应的值,不同于get的是若键不存在,创建并添加键值对。

{'machines': ['foo', 'bar'], 'username': 'admin'}
>>> d.setdefault('userage')
>>> d
{'machines': ['foo', 'bar'], 'username': 'admin', 'userage': None}
>>> d.setdefault('username')
'admin'
>>> d.setdefault('age',24)
24
>>> d
{'machines': ['foo', 'bar'], 'username': 'admin', 'userage': None, 'age': 24}

(11)update:在字典中添加多个项,有就不添加,没有就添加
也就是用一个字典去更新另一个字典,可以用于两个字典不重复的合并。

>>> d.update({'a':1,'b':2})    #接着上面的d
>>> d
{'machines': ['foo', 'bar'], 'username': 'admin', 'userage': None, 'age': 24, 'a': 1, 'b': 2}
>>> d.update({'a':1,'b':2})
>>> d
{'machines': ['foo', 'bar'], 'username': 'admin', 'userage': None, 'age': 24, 'a': 1, 'b': 2}

5.3创建集合set

创建空集合:set(),但是集合是用{}括起来的。

>>> a = {1,2,3}
>>> b = {'a','b','c'}

set的特点是:元素唯一(可用于去重)、无序

5.3.1集合的运算和方法

运算:

  • &交集(s.intersection(t) )
  • |并集(s.union(t))
  • -差集(s.difference(t))
  • ^对称差集(s.symmetric_difference(t) )
>>> a = {1,2,3}
>>> b = {'a',1,2,'c'}
>>> a & b
{1, 2}
>>> a | b
{1, 2, 3, 'a', 'c'}
>>> a - b      #可以看出 a-b == a-(a&b)
{3}
>>> a^b        # a^b == (a|b) - (a&b) 
{'a', 3, 'c'} 

方法:
(1)len(t):计算长度
(2)in:检查成员变量
(3)s.issubset(t) : 检查s是否是t的子集合
(4)t.update({12,13,14}) :和字典的一样,添加多个值
(5)t.remove(3):移除单个元素
(6)t.clear():清空集合
(7)t.copy():浅复制

对于集合最重要的是它的唯一性,可以用来去重,然后就是掌握它的交并差运算就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值