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

青旅半醒 2023-06-09 10:05 83阅读 0赞

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

@ 创建字典
(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) 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。

发表评论

表情:
评论列表 (有 0 条评论,83人围观)

还没有评论,来说两句吧...

相关阅读