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))
@ 字典内置方法
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) 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
还没有评论,来说两句吧...