Python字典和集合

1.字典

  • 字典是无序的可变序列,元素存放无序,通过哈希方式进行数据存取,而不是通过索引
  • 字典中保存一个个的键值对:key:value,可以通过key来获取对应的值,很类似我们的汉语字典
  • 字典中的键必须是唯一的,且字典中的键必须是不可变
  • 字典是可变的,且可以任意嵌套
  • 字典是无序的,各项从左到右随机排序,保存在字典中的项没有特定的顺序,查找效率高

2.字典的创建

  • 语法:dictionary = {‘key1’:‘value1’,‘key2’:‘value1’,…,‘keyn’:‘valuen’}
  • 字典以键值对方式存在,"键"和"值"之间用冒号分隔,连个相邻元素使用逗号分隔,所有的元素放在{}
# 创建空字典
dict1 = {}
# 键相同,则后面的值覆盖前面的值
dict2 = {'name':'五竹','age':20,'name':'范闲'}
print(dict2)   # 输出:{'name': '范闲', 'age': 20}
# 使用dict()创建字典
dict3 = dict(a=3,b=4)
print(dict3)    # 输出:{'a': 3, 'b': 4}
# 使用映射函数创建字典
# 语法:dictionary = dic(zip(list1,list2))
key = ['回忆','成长']
value = ['年轮','婴儿哭啼']
dict4 = dict(zip(key,value))
print(dict4)     # 输出:{'回忆': '年轮', '成长': '婴儿哭啼'}

3.字典操作

3.1 存储多个学生的成绩

dict1 = {'English':79,'Java':100,'Python':200}
print(dict1)  # 输出:dict1 = {'English':79,'Java':100,'Python':200}
print(dict1)  # 输出:{'English': 79, 'Java': 100, 'Python': 200}

3.2 元素访问

# 语法:字典名[key] 
dict1 = {'English':79,'Java':100,'Python':200}
print(dict1['Java'])   # 输出:100
print(dict1['java'])   # 输出:KeyError: 'java' 没有找到

# 语法:字典名.get()
result = dict1.get('English')
result1 = dict1.get('java','1')
print(result)    # 输出79
print(result1)   # 找不到返回None,如果指定后面参数输出后面指定参数

3.3 添加

dict1 = {'English':79,'Java':None,'Python':200}
dict1['Java'] = 10        # 添加
dict1['English'] = 1000   # 修改
print(dict1)              # 输出:{'English': 1000, 'Java': 10, 'Python': 200}

3.4 删除

# pop()方法删除,返回指定键的值
# 注意:通过键,直接删除整个键值对
dict1 = {'English':79,'Java':None,'Python':200}
dict1.pop('Java')
print(dict1)     # 输出:{'English': 79, 'Python': 200}

# del删除键值对,不返回值
dict1 = {'English':79,'Java':None,'Python':200}
del dict1['English']
print(dict1)         # 输出:{'Java': None, 'Python': 200}
del dict1            # 删除字典
#print(dict1)         # 报错:NameError: name 'dict1' is not defined

# clear()清空字典
dict1 = {'English':79,'Java':None,'Python':200}
print(dict1.clear())      # 输出:None

3.5 字典合并

# .update()函数,合并字典
dict1 = {1:'hello'}
dict2 = {2:'world'}
dict1.update(dict2)
print(dict1)      # 输出:{1: 'hello', 2: 'world'}

3.6 遍历

# 方法一:只获取键
dict1 = {'English':79,'Java':None,'Python':200}
for key in dict1:
    print(key,end=" ")  # 输出:English Java Python
    
# 方法二:只获取值
dict1 = {'English':79,'Java':None,'Python':200}
# values,得到的结果是一个列表,当作列表处理
print(dict1.values())       # 输出:dict_values([79, None, 200])
for values in dict1.values():
    print(values,end=" ")   # 输出:79 None 200

# 方法三:同时获取键值
dict1 = {'English':79,'Java':None,'Python':200}
#items()得到的是一个列表,类表中元素值元组
print(dict1.items())   # 输出:dict_items([('English', 79), ('Java', None), ('Python', 200)])
for item,value in dict1.items():
    print("Key:%s\tValue:%s"%(item,value))
'''
输出:
Key:English	Value:79
Key:Java	Value:None
Key:Python	Value:200
'''

# 方法四:获取位置
dict1 = {'English':79,'Java':None,'Python':200}
for index,key in enumerate(dict1):
    value = dict1[key]
    print(index,key,value)
'''
输出:
0 English 79
1 Java None
2 Python 200
'''

3.7 获取键值对个数

# len()函数获取键值对个数
dict1 = {'English':79,'Java':None,'Python':200}
print(len(dict1))    # 输出:3

3.8 成员操作

# 判断键是否在字典中,存在就是True,否则就是False
dict1 = {'English':79,'Java':None,'Python':200}
print('English' in dict1)    # 输出:True

3.9 字典推导式

  • 语法:{key:value for key,value in iteral}
  • 使用字典推导式快速生成一个字典,与列表推导式类似
# s1每个元素与出现次数使用推导式快速变成字典
s1 = "2uiirwioeroweorsiotoewtio"
print(set(s1))
result = {ch:s1.count(ch) for ch in set(s1)}
print(result)     # 输出:{'2': 1, 'o': 6, 'w': 3, 't': 2, 'r': 3, 'e': 3, 'u': 1, 'i': 5, 's': 1}

# 键值互换
d1 = {"a":10,'b':20,"c":30}
dict1 = {value:key for key,value in d1.items()}
print(dict1)        # 输出:{10: 'a', 20: 'b', 30: 'c'}}

4.集合

  • Python中的集合同数学中的集合概念类似,保存不重复的元素。
  • 特点:不允许由重复元素,如果添加重复元素,则会自动过滤,可以进行交集,并集和差集等运算

5.集合的创建

  • 创建集合,如果输入重复元素,Python会自动只保留一个
# 语法:set = {}
set = {1,2,2,3,}
print(set)  # 输出:去重 {1, 2, 3} 

# 语法:set = set(V)
# V:list or set or range对对象等
set1 = ('时间是最好的庸医') 
set1 = set(set1)
print(set1)     # 输出:{'间', '是', '好', '医', '时', '庸', '的', '最'}

6.集合操作

6.1 添加

  • 语法:set.add(element)
set1 = {'四月','是','你的'}
set1.add('谎言')
print(set1)         # 输出:{'四月', '你的', '是', '谎言'}
set1.update(['时间','最好的','庸医'])
print(set1)         # 输出:{'你的', '时间', '四月', '谎言', '最好的', '庸医', '是'}

6.2 删除

  • del 方法删除集合;remove()方法删除一个指定元素;clear()方法清空集合;pop()方法随机删除
  • 使用remove()方法,如指定内容不存在会抛出异常,删除前一你应该使用关键子’in’判断该元素是否存在
set1 = {'四月','是','你的','谎言'}
# set1.pop()            # 随机删除
# set1.remove('四月')   # 指定删除,不存在报错
# set1.discard('四月')  # 删除元素不存在不会报错
set1.clear()            # 清空集合
print(set1)             # 输出set()

6.3 元素个数

set1 = {'四月','是','你的','谎言'}
print(len(set1))    # 输出:4

6.4 成员操作

set1 = {'四月','是','你的','谎言'}
print('四月' in set1)    # 输出:True

6.5 集合的交集,并集和差集运算

运算符说明
&交集运算符
l并集运算符
-差集运算符
# 并集 包含了s1和s2中所有的元素
s1 = {1,2,3,4,5,6}
s2 = {3,4,5,6,7,8}
res1 = s1 | s2
print(res1)     # 输出:{1, 2, 3, 4, 5, 6, 7, 8}

# 交集 两个集合共有的元素
res2 = s1 & s2
print(res2)    # 输出:{3, 4, 5, 6}

# 差集  前面的集合减去交集
res3 = s1 - s2
print(res3)    # 输出:{1, 2}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值