python中字典与集合常用操作方法

一、字典

列表缺陷:若数据顺序发生变化,无法通过下标i(list[i])访问到变化数据

字典:数据以键值对形式出现,与数据顺序无关,不支持下标访问,无论顺序如何变化,均可用键名key查找数据

字典特点:符号为大括号、数据以键值对形式出现、各键值对间用逗号隔开

1.1 常见操作方法:增、删、改、查

  • 增加
    • 单个增加:字典序列[key] = 值    # 不存在则增加,存在则修改
    • 多个增加:dict1.update(dict2),将字典dict2的键值对更新至字典dict1,若key已存在,则覆盖原值
  • 删除
    • 删除指定键值对:del 字典序列[key]
    • 字典序列.popitem():返回并删除最后一对键值对,若为空,则报异常
    • 清空字典:字典序列.clear()
  • 修改:字典序列[key] = 值    # 若key存在则修改,否则新增
  • 查找
    • key值查找:字典序列[key],若key存在返回对应值,否则报错
    • get():字典序列.get(key,默认值),若key不存在则返回默认值,若默认值省略,则返回None
    • keys():以列表形式返回字典所有键
    • values():以列表形式返回字典所有值
    • items():以列表形式返回字典(键,值)元组数组

举例如下: 

dict1 = {'id': 2, 'name': 'XX', 'age': 20}  # 创建字典,键(key):值(value),简称k:v
dict2 = {'name': 'YX', 'tel': 888, 'address': 'JXUST'}
print('------------新增---------------')
dict1['gender'] = '男'  # 增加键值对'gender':'男'
print(dict1)
dict1.update(dict2)  # 把字典dict2中的键值对更新至字典dict1中,若已存在则覆盖
print(dict1)
print('------------删除---------------')
del dict1['id']  # 删除键名为id的键值对
print(dict1)
print(dict1.popitem(), dict1)  # popitem()返回并删除最后一对键和值,若为空,则报异常
# dict1.clear()  # 清空字典
print('------------修改---------------')
dict1['gender'] = '女'  # 修改键gender值为女
print(dict1)
print('------------查找---------------')
print(dict1['age'])
print(dict1.get('name'), dict1.get('weight', '体重未知!'), dict1.get('weight'))
print(dict1.keys(), dict1.values(), dict1.items())  # 以列表形式获取字典所有键、所有值、所有(键,值)

输出:
------------新增---------------
{'id': 2, 'name': 'XX', 'age': 20, 'gender': '男'}
{'id': 2, 'name': 'YX', 'age': 20, 'gender': '男', 'tel': 888, 'address': 'JXUST'}
------------删除---------------
{'name': 'YX', 'age': 20, 'gender': '男', 'tel': 888, 'address': 'JXUST'}
('address', 'JXUST') {'name': 'YX', 'age': 20, 'gender': '男', 'tel': 888}
------------修改---------------
{'name': 'YX', 'age': 20, 'gender': '女', 'tel': 888}
------------查找---------------
20
YX 体重未知! None
dict_keys(['name', 'age', 'gender', 'tel']) dict_values(['YX', 20, '女', 888]) dict_items([('name', 'YX'), ('age', 20), ('gender', '女'), ('tel', 888)])

1.2 字典的循环遍历

  • 遍历字典的key:for k in 字典序列.keys():print(k)
  • 遍历字典的value:for v in 字典序列.values():print(v)
  • 遍历字典的键值对:for k,v in 字典序列.items():print(f'{k} = {v}')
  • 遍历字典的元素:for i in 字典序列.items():print(i)

举例如下:

print('------------遍历---------------')
print('-----键-----')
for k in dict.keys():  # 遍历键key
    print(k)
print('-----值-----')
for v in dict.values():  # 遍历值value
    print(v)
print('-----键值-----')
for k,v in dict.items():  # 遍历键值对
    print(f'{k} = {v}')
print('-----元素-----')
for i in dict.items():  # 遍历元素
    print(i)

输出:
------------遍历---------------
-----键-----
name
age
gender
tel
-----值-----
YX
20
女
888
-----键值-----
name = YX
age = 20
gender = 女
tel = 888
-----元素-----
('name', 'YX')
('age', 20)
('gender', '女')
('tel', 888)

二、集合

创建集合:使用{}或set(),空集合只能用set(),{}用来创建空字典

集合特点:可以去除重复数据,数据是无序的,故不支持下标

集合常见操作方法

2.1 增加

  • add():集合序列.add(数据) ,追加单个数据,由于集合有去重功能,若追加数据已存在,则不进行任何操作
  • update():集合序列.update(序列)   # 追加序列,序列可为列表、元组或字符串等

2.2 删除

  • remove():序列.remove(数据),删除集合中指定数据,若数据不存在则报错
  • discard():序列.discard(数据),删除集合中指定数据,若数据不存在不报错
  • pop():序列.pop(),随机删除集合中某个数据,并返回该数据

2.3 判断

  • in:判断数据在集合序列,若在为True,否则False
  • not in:判断数据不在集合序列,若不在为True,否则False
  • s1.issubset(s2):判断集合s1所有元素是否都包含在集合s2中,若在为True,否则False

举例如下: 

print('------------集合------------')
print('--------创建方式一--------')
s1 = {'a', 'b', 2, 'a'}
print(s1)
s1.add('aa')  # 追加单个数据
print(s1)
s1.update(('bb', 22))  # 追加元组序列
print(s1)
print('--------创建方式二--------')
s2 = set('ab2a')
print(s2)
s2.update(['bb', 'cc', 22])  # 追加列表序列
print(s2)
s2.update('cdd')  # 追加字符串序列
print(s2)
print('--------删除--------')
s1.remove('a')  # 删除a
print(s1)
s1.discard(2)  # 删除2
print(s1)
print(s1.pop(), s1)
print('--------判断--------')
print('b' in s1, 'bb' not in s1, s1.issubset(s2))

输出:
------------集合------------
--------创建方式一--------
{'b', 2, 'a'}
{'b', 2, 'aa', 'a'}
{2, 'bb', 'b', 'a', 22, 'aa'}
--------创建方式二--------
{'b', '2', 'a'}
{'2', 'bb', 'b', 'a', 22, 'cc'}
{'2', 'c', 'bb', 'b', 'd', 'a', 22, 'cc'}
--------删除--------
{2, 'bb', 'b', 22, 'aa'}
{'bb', 'b', 22, 'aa'}
bb {'b', 22, 'aa'}
--------判断--------
True True False

导航:http://xqnav.top/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

learning-striving

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值