Python3 菜鸟教程 笔记4 -- 字典和集合

$ 字典
键必须是唯一的,但值则不必。
键必须是不可变的,如字符串,数字或元组。值可以取任何数据类型

@ 创建字典
(1)大括号中直接赋值
>>> items
{'book': 24, 'toy': 98, 'guitar': 370}
>>>

(2)字典推导
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

(3)构造函数dict()
>>> items=dict([('book',24),('toy',98),('guitar',370)])
>>> items
{'book': 24, 'toy': 98, 'guitar': 370}
>>>

(4)如果关键字只是简单的字符串,还可以使用关键字参数指定键值对(注意键没有引号)
>>> items=dict(book=24,toy=98,guitar=370)
>>> items
{'book': 24, 'toy': 98, 'guitar': 370}
>>>

@ in 操作符
key in dict 
如果键在字典dict里返回true,否则返回false
[例]
>>> dict1={'Date':'Oct 19th','Day':'Saturday'}
>>> 
>>> 'Day' in dict1
True
>>> 'Weather' in dict1
False
>>> 

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

str(dict)  -> 输出字典
[例]
>>> dict1={'Date':'Oct 19th','Day':'Satyrday','Weather':'Overcast'}
>>> str(dict1)
"{'Date': 'Oct 19th', 'Day': 'Satyrday', 'Weather': 'Overcast'}"
>>> 
>>> type(str(dict1))
<class 'str'>
>>> 

@ 字典内置方法
1    dict.clear() -> 删除字典内所有元素

2    dict.copy()  -> 返回一个字典的浅复制
[例]
>>> a = {1: [1,2,3]}
>>> b = a.copy()    #浅拷贝
>>> 
>>> import copy
>>> c = copy.deepcopy(a)   #深拷贝
>>> a[1].append(5)
>>> print(a,b,c)
{1: [1, 2, 3, 5]} {1: [1, 2, 3, 5]} {1: [1, 2, 3]}
>>> 
Python 直接赋值、浅拷贝和深度拷贝解析
https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html

3    dict.fromkeys(seq,value=None)
创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。
[例]
>>> seq = ('青龙', '玄武', '白虎','朱雀')
>>> dict1
{}
>>> dict1=dict1.fromkeys(seq)
>>> dict1
{'青龙': None, '玄武': None, '白虎': None, '朱雀': None}
>>>
>>> dict1=dict1.fromkeys(seq,['角'])     #类似浅拷贝
>>> dict1
{'青龙': ['角'], '玄武': ['角'], '白虎': ['角'], '朱雀': ['角']}
>>> dict1['青龙'].append('亢')
>>> dict1
{'青龙': ['角', '亢'], '玄武': ['角', '亢'], '白虎': ['角', '亢'], '朱雀': ['角', '亢']}
>>> dict1['玄武'][0]='斗'
>>> dict1
{'青龙': ['斗', '亢'], '玄武': ['斗', '亢'], '白虎': ['斗', '亢'], '朱雀': ['斗', '亢']}
>>>

4    dict.get(key, default=None)  -> 返回指定键的值
key -- 字典中要查找的键。
default -- 如果指定键的值不存在时,返回该默认值值。
[例]
>>> dict1={'Date':'Oct 19th','Day':'Saturday'}
>>> dict1.get('Date')
'Oct 19th'
>>> dict1.get('Weather')
>>> dict1.get('Weather','NA')
'NA'
>>> 

5    dict.setdefault(key, default=None)
和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
[例]
>>> dict1={'Date': 'Oct 19th', 'Day': 'Saturday'} 
>>> dict1.setdefault('Weather','Sunny')
'Sunny'
>>> dict1
{'Date': 'Oct 19th', 'Day': 'Saturday', 'Weather': 'Sunny'}
>>> 
    
6    dict.items()
以列表返回可遍历的(键, 值) 元组数组
[例]
>>> dict1
{'Date': 'Oct 19th', 'Day': 'Saturday'}
>>> print ("Value : %s" %  dict1.items())
Value : dict_items([('Date', 'Oct 19th'), ('Day', 'Saturday')])
>>> 
>>> for k,v in dict1.items():    #遍历字典
    print(k,':\t',v)

    
Date :     Oct 19th
Day :     Saturday
>>> 

7    dict.keys()
返回一个迭代器,可以使用 list() 来转换为列表
[例]
>>> dict1={'Date': 'Oct 19th', 'Day': 'Saturday'}
>>> dict1.keys()
dict_keys(['Date', 'Day'])
>>> list(dict1.keys())
['Date', 'Day']
>>> 

8    dict.values()
返回一个迭代器,可以使用 list() 来转换为列表
[例]
>>> dict1
{'Date': 'Oct 19th', 'Day': 'Saturday'}
>>> dict1.values()
dict_values(['Oct 19th', 'Saturday'])
>>> list(dict1.values())
['Oct 19th', 'Saturday']
>>> 

9    dict.update(dict2)
把字典dict2的键/值对更新到dict里
[例]
>>> dict1
{'Date': 'Oct 19th', 'Day': 'Saturday', 'Weather': 'Sunny'}
>>> dict2={'Memo':'Birthday of G'}
>>> dict1.update(dict2)
>>> dict1
{'Date': 'Oct 19th', 'Day': 'Saturday', 'Weather': 'Sunny', 'Memo': 'Birthday of G'}
>>> 

10    dict.pop(key,default=None)
key: 要删除的键值,返回值:被删除的值
default: 如果没有 key,返回 default 值
       dict.popitem()
随机返回并删除字典中的一对键和值。
[例]
>>> dict1
{'Date': 'Oct 19th', 'Day': 'Saturday', 'Weather': 'Sunny', 'Memo': 'Birthday of G'}
>>> dict1.pop('Memo')
'Birthday of G'
>>> dict1
{'Date': 'Oct 19th', 'Day': 'Saturday', 'Weather': 'Sunny'}
>>> 
>>> dict1.popitem()   #交互模式返回最后一个
('Weather', 'Sunny')
>>> dict1
{'Date': 'Oct 19th', 'Day': 'Saturday'}
>>> 
 

$ 集合
@ 集合运算(a,b 均为集合)
a & b    # 集合a和b的交集
a | b    # 集合a和b的并集
a - b    # 集合a中包含而集合b中不包含的元素
a ^ b    # 不同时包含于a和b的元素

@ 集合推导式(Set comprehension)
[例子]
>>> a = {x for x in 'banana' if x not in 'avocado'}
>>> a
{'n', 'b'}
>>> set('banana')-set('avocado')    #相同效果
{'n', 'b'}
>>> 

@  使用set()创建含有一个元素和多个元素的集合

>>> fruit_set = set(('apple',))
>>> my_set
{'apple'}
>>>
>>> fruit_set = set(('apple','avocado'))
>>> fruit_set
{'apple', 'avocado'}
>>>

创建一个元素不用元组是如下效果
>>> fruit_set
{'l', 'p', 'e', 'a'}
>>>

@ 集合内置方法 https://www.runoob.com/python3/python3-set.html
set.add(x)       为集合添加元素(将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作)
set.update(x)  为集合添加元素。参数可以是列表,元组,字典等,x可以有多个,用逗号分开
                       注意以下区别:
                       set.update({'somestr'}) 将字符串添加到集合中
                       set.update('somestr')   将字符串拆分单个字符后,然后一个个添加到集合中

set.discard(x)  移除集合中指定的元素(如果元素不存在,不会发生错误)
set.remove(x)   移除集合中指定的元素(将元素x从集s中移除,如果元素不存在,则会发生错误)
set.pop()        随机移除元素(多次执行测试结果不一样,在交互模式,pop 是删除集合的最后一个元素)
set.clear()        移除集合中的所有元素
set.copy()        拷贝一个集合(集合的元素是不可变元素,没有浅拷贝和深拷贝的区别)
set1.isdisjoint(set2)  判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
set1.issubset(set2)       判断指定集合是否为该方法参数集合的子集
set1.issuperset(set2)  判断该方法的参数集合是否为指定集合的子集

set1.difference(set2, set3 ... etc)                 返回集合的差集
set1.difference_update(set2, set3 ... etc)    移除集合中的元素,该元素在指定的集合也存在
[例]
>>> set1=set('abcde')
>>> set2=set('ninja')
>>> set3=set('banana')
>>> set1.difference(set2,set3)
{'c', 'd', 'e'}
>>> set1
{'a', 'c', 'b', 'd', 'e'}
>>> set1.difference_update(set2,set3)
>>> 
>>> set1
{'c', 'd', 'e'}
>>> 

set1.intersection(set2, set3 ... etc)                 返回集合的交集(一个新的集合)
set1.intersection_update(set2, set3 ... etc)    在原始的集合上移除不重叠的元素

set1.union(set2, set3 ... etc)    返回集合的并集

set1.symmetric_difference(set2)    返回两个集合中不重复的元素集合。
set1.symmetric_difference_update(set2)    移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值