天天看点

《python从入门到项目实践》第10章 字典与集合 zip() set()

目录

字典 

访问对应键的值   dictionary.items()

添加、修改、删除字典元素

字典推导式,快速生成字典

 集合

可以使用set函数创建集合

集合的添加和删除

集合的交集、并集与差集的运算(&   |   -)

列表、元组、字典、集合的对比

字典 

任意对象的无序集合 

dictionary = {'key1':'value1', 'key2':'value2', 'key3':'value3',......}

 字典里key 唯一,且不可变的

value不唯一

dictionary={}  #空字典

dictionary = dict(zip(list1,list2)) #列表创建字典

zip():将多个列表或者元组对应位置的元素组为元组,,可以用list()函数将其转为列表

name = ['邓肯','吉诺比利','帕克']        # 作为键的列表
sign = ['石佛','妖刀','跑车']            # 作为值的列表
dictionary = dict(zip(name,sign))      # 转换为字典
print(dictionary)                        # 输出转换后字典
           
{'邓肯': '石佛', '吉诺比利': '妖刀', '帕克': '跑车'}
 dictionary = dict(key1=value1,key2=value2,key3=value3,..... )  # 创建字典
 dictionary = dict.fromkeys(list1)   # 创建值为空的字典
name_list = ['邓肯','吉诺比利','帕克']       # 作为键的列表
dictionary = dict.fromkeys(name_list)
print(dictionary)
           
{'邓肯': None, '吉诺比利': None, '帕克': None}

元组作为键,列表作为值

name_tuple = ('邓肯','吉诺比利', '帕克')       # 作为键的元组
sign = ['石佛','妖刀' ]    # 作为值的列表
dict1 = {name_tuple:sign}                       # 创建字典
print(dict1)
           
{('邓肯', '吉诺比利', '帕克'): ['石佛', '妖刀']}

dict1 = {list1, list2} 会报错 

dictionary.clear() 清空字典

访问对应键的值   dictionary.items()

dictionary.get(key,[default])

default 指定键不存在返回的值,默认None

遍历字典

 dictionary.items()
dictionary = {'qq':'84978981','明日科技':'84978982','无语':'0431-84978981'}
for item in dictionary.items():
    print(item)
           

('qq', '84978981')

('明日科技', '84978982')

('无语', '0431-84978981')

dictionary = {'qq':'4006751066','明日科技':'0431-84978982','无语':'0431-84978981'}
for key,value in dictionary.items():
    print(key,"的联系电话是",value)
           

qq 的联系电话是 4006751066

明日科技 的联系电话是 0431-84978982

无语 的联系电话是 0431-84978981

添加、修改、删除字典元素

dictionary =dict((('邓肯', '石佛'),('吉诺比利','妖刀'), ('帕克','跑车')))
dictionary["罗宾逊"] = "海军上将"   # 添加一个元素
print(dictionary)
           
{'邓肯': '石佛', '吉诺比利': '妖刀', '帕克': '跑车', '罗宾逊': '海军上将'} #添加
dictionary =dict((('邓肯', '石佛'),('吉诺比利','妖刀'), ('帕克','跑车')))
dictionary["帕克"] = "法国跑车"   # 添加一个元素,当元素存在时,则相当于修改功能
print(dictionary)
           
{'邓肯': '石佛', '吉诺比利': '妖刀', '帕克': '法国跑车'}  #修改
dictionary =dict((('邓肯', '石佛'),('吉诺比利','妖刀'), ('帕克','跑车')))
del dictionary["帕克"]    # 删除一个元素
print(dictionary)
           
{'邓肯': '石佛', '吉诺比利': '妖刀'}        # 删除一个元素del 直接就没了

字典推导式,快速生成字典

import random                                  #导入random标准库
randomdict = {i:random.randint(10,100) for i in range(1,5)}
print("生成的字典为:",randomdict)
           
生成的字典为: {1: 92, 2: 53, 3: 70, 4: 84}

 集合

也是无序的

set1 = {1, 2, 3, 7, 8}  #集合

可以使用set函数创建集合

setname = set(iteration)

iteration : 表示要转化为集合的可迭代对象

如果有重复元素,只保留一个

创建空集合 只能用 set()  不能是{}  这表示空字典

集合的添加和删除

add()

setname.add(element)
mr = set(['零基础学Java','零基础学Android','零基础学C语言','零基础学C#','零基础学PHP'])
mr.add('零基础学Python')  # 添加一个元素
print(mr)
           
{'零基础学C语言', '零基础学Android', '零基础学PHP', '零基础学Python', '零基础学C#', '零基础学Java'}

 删除 remove pop clear

mr = set(['零基础学Java','零基础学Android','零基础学C语言','零基础学C#','零基础学PHP','零基础学Python'])
mr.remove('零基础学Python')                    # 移除指定元素
print('使用remove()方法移除指定元素后:',mr)
mr.pop()                                        # 删除一个元素
print('使用pop()方法移除一个元素后:',mr)
mr.clear()                                      # 清空集合
print('使用clear()方法清空集合后:',mr)
           

使用remove()方法移除指定元素后: {'零基础学C语言', '零基础学C#', '零基础学PHP', '零基础学Java', '零基础学Android'}

使用pop()方法移除一个元素后: {'零基础学C#', '零基础学PHP', '零基础学Java', '零基础学Android'}

使用clear()方法清空集合后: set()

remove 指定的元素不存在将抛出异常

集合的交集、并集与差集的运算(&   |   -)

pf = set(['邓肯','加内特','马龙'])       # 保存大前锋位置的球员名字
print('大前锋位置的球员有:',pf,'\n')      # 输出大前锋的球员名字
cf = set(['邓肯','奥尼尔','姚明'])       # 保存中锋位置的球员名字
print('中锋位置的球员有:', cf,'\n')      # 输出中锋的球员名字
print('交集运算:', pf & cf)      # 输出既是大前锋又是中锋的球员名字
print('并集运算:', pf | cf)     # 输出大前锋和中锋的全部球员名字
print('差集运算:', pf - cf)     # 输出是大前锋但不是中锋的球员名字
           

大前锋位置的球员有: {'马龙', '加内特', '邓肯'} 

中锋位置的球员有: {'邓肯', '姚明', '奥尼尔'} 

交集运算: {'邓肯'}

并集运算: {'加内特', '姚明', '奥尼尔', '马龙', '邓肯'}

差集运算: {'马龙', '加内特'}

列表、元组、字典、集合的对比

数据结构 是否可变 是否重复 是否有序 定义符号
列表 可变 可重复 有序 [ ]
元组 不可变 可重复 有序 ( )
字典 可变 可重复 无序 {key:value}
集合 可变 不可重复 无序 { }