python 字典去重value_python 集合&字典_frozenset & defaultdict & MD5在线加密解密工具

本文介绍了Python中的数据结构,包括集合的创建、增加、删除和查看操作,展示了如何利用集合进行URL去重。还探讨了字典的创建、增加、删除和查看,以及字典在英文词频统计器中的应用。此外,文章提到了frozenset、defaultdict,并总结了可变与不可变数据类型。最后,讨论了MD5加密解密工具及其在线使用。
摘要由CSDN通过智能技术生成

文章目录

集合&字典

学习目标

01 集合

集合的创建:

集合的内置方法

查看集合有什么方法:

集合的增加

集合的删除

集合的查看:交集、并集、差集

集合的特性

集合应用案例: 存在重复元素 ----URL地址去重

例:是否存在重复元素:

字典去重

集合应用案例: 两个数组的交集

集合应用案例: 华为笔试编程题: 明明的随机数

02 frozenset

03 字典

字典创建与删除

1). 简单字典创建

2).内建方法:fromkeys

3).zip间接创建

字典的常用方法

字典的增加

字典的查看

字典的删除

例: 英文词频统计器

switch语句实现

例:前k个高频

04 defaultdict

案例练习:用defaultDict来做一个练习,把list(随机生成50个1-100之间的随机数)中大于66的元素和小于66的元素

05 内置数据结构总结

可变与不可变数据类型

有序序列和无序序列

06 MD5在线加密解密工具

MD5在线加密解密工具

MD5简介

MD5加密

MD5解密

MD5在线加密解密工具

批量加密程序

集合&字典

学习目标

1、一山不容二虎的集合

2、frozenset

3、字典

4、defaultdict

5、内置数据结构总结

6、项目实战:MD5在线加密解密工具

01 集合

集合(set)是一个无序的不重复元素序列。 1,2,3,4,1,2,3 = 1,2,3,4

集合的创建:

1). 使用大括号 { } 或者 set() 函数创建集合;

2). 注意:

l 创建一个空集合必须用 set() 而不是 { }

l { } 是用来创建一个空字典。

38890de1a88ee1ffce19dcd6cf3f3bcb.png

集合的内置方法

0bb272175241f63e5cff3f604aede366.png

查看集合有什么方法:

1df6c20e4c5335a414ee07b35afee6d1.png

ad11e79d5a0371e0c6dcd98073d15264.png

集合的增加

add: 添加单个元素到集合中

update: 添加多个元素到集合中

d5d42335a904e5fcd2cd23a02d4de35a.png

ade58d73bedeac2c5f320369906c8ab5.png

集合的删除

remove: 如果元素存在, 直接删除, 如果不存在, 抛出异常KeyError。

discard:如果元素存在, 直接删除, 如果不存在, do nothing。

pop:随机删除指定元素, 并返回删除的值。

clear:清空集合。

e05dabfcd9ec044f24eb7b06d0221ca7.png

eaa0a0f572da999b5132c6230d0d8355.png

6695eb9b0673cfaa60d2dbf2f4e4d479.png

集合的查看:交集、并集、差集

ba0c54e91e9dd5f7b76c9add257dbacb.png

e14c02cd6e8e2621859e02bfea609858.png

集合的特性

支持的特性:成员操作副

不支持的操作:索引/切片,重复,连接操作符

6ee0eb0817277f7275d1366ceb873803.png

集合应用案例: 存在重复元素 ----URL地址去重

b2c9c09442281c0e3b63d37275b075b8.png

结果:

245ef4c8419f32758caa097e2d03f7a6.png

例:是否存在重复元素:

判断nums的长度和去重之后的长度是否一致,

如果不一致, 则有重复的元素, 返回True

如果一致, 则没有重复的元素, 返回False

638a29c29d4e94ee466249696c03b5fc.png

字典去重

35402d4c20bd51b0bb32fb1d2386946c.png

集合应用案例: 两个数组的交集

dba82a6f9323e5ff597d5a58e23812cb.png

集合应用案例: 华为笔试编程题: 明明的随机数

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从大到小排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。

1). 生成了N个1到1000之间的随机整数(N≤1000)

2). 去重: 其中重复的数字,只保留一个,把其余相同的数去掉

3). 从大到小排序

"""

import random

# 2). 去重: 其中重复的数字,只保留一个,把其余相同的数去掉.生成一个空集合

nums = set()

N = int(input('N: '))

# 1). 生成了N个1到1000之间的随机整数(N≤1000)

for count in range(N):

num = random.randint(1, 1000)

nums.add(num)

# 3). 从大到小排序, li.sort()智能对列表进行排序; sorted()方法可以对任意数据类型排序。

print(sorted(nums, reverse=True))

结果:

ec1e838ee1427c92e75d7a7da32ab987.png

02 frozenset

frozenset 是 set 的不可变版本。

因此 set 集合中所有能改变集合本身方法(如 add、remove、discard、xxx_update 等),frozenset 都不支持;

set 集合中不改变集合本身的方法,fronzenset 都支持。

frozenset 的这些方法和 set 集合同名方法的功能完全相同。

frozenset 的作用主要有两点:

• 当集合元素不需要改变时,使用 frozenset 代替 set 更安全。

• 当某些 API 需要不可变对象时,必须用 frozenset 代替set。

比如 dict 的 key 必须是不可变对象,因此只能用 frozenset;

再比如 set 本身的集合元素必须是不可变的,因此 set 不能包含 set,set 只能包含 frozenset。

b21fb2c13bc851a1f352141be96ae3d5.png

03 字典

字典是另一种可变容器模型,且可存储任意类型对象。

键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。

d = {key1 : value1, key2 : value2 }

d = {‘Z’ : ‘字’, ‘D’ : ‘典’ }

字典创建与删除

1). 简单字典创建

a8ee660c07c6401af55295f47437288c.png

2).内建方法:fromkeys

字典中的key有相同的value值,默认为None

33580d095473129ed8ee7cfe85ebc644.png

结果:

126cd6c34260f3bbd7cf7652f956fba4.png

3).zip间接创建

4ec95a8c1633a5013db3b841dc3a581e.png

字典的常用方法

字典的增加

142324afd1ea5d0eacae024f2deaa088.png

8b69c07b957cb55fa4fe2c44e062d892.png

86f9cdbfcd5ffc7f124726659e620dfb.png

5ca2dbdff369ef3877b3b0a51ba57ccb.png

c06974ca2df0e9e2ca9cb9cd6877c6a9.png

bc5c899136767fe46dff900792d4b19a.png

字典的查看

98c8ace5c9f4b2dc7cd12154e0d5eaf5.png

f4b52ea7774242d2f6650c60f34fc9f7.png

b0c2d0f8d712bb1f3d88e0050dd9936e.png

740cbefd054355d2beb08b24855ebbd4.png

60102521e469df35368413e3efa6b95b.png

字典的删除

fb9c8840f03f5661dde974490c79ea85.png

eb1d59204065d8b79715b52fa40619eb.png

364f0c1c71df0cf5667980b01ca2f297.png

247754a278bd5a35571af284280c3807.png

e8694456cd4a6fb2031d826c5ea1569e.png

eed375c500d2a3d689b94a2f6929f28f.png

例: 英文词频统计器

作为字典(key-value)的经典应用题目,单词统计几乎出现在每一种语言键值对学习后的必练题目,

主要需求:

写一个函数wordcount统计一篇文章的每个单词出现的次数(词频统计)。

统计完成后,对该统计按单词频次进行排序。

from collections import Counter

text = """

Introducing Red Hat Enterprise Linux 7

Red Hat Enterprise Linux 7 showcases the latest features in an enterprise operating system

Introducing Red Hat Enterprise Linux 7

Red Hat Enterprise Linux 7 showcases the latest features in an enterprise operating system

Introducing Red Hat Enterprise Linux 7

Red Hat Enterprise Linux 7 showcases the latest features in an enterprise operating system

Introducing Red Hat Enterprise Linux 7

Red Hat Enterprise Linux 7 showcases the latest features in an enterprise operating system

Enterprise architects will appreciate new capabilities such as lightweight application isolation.

Application developers will welcome an updated development environment and application-profiling tools. Read more at the Red Hat Developer Blog.

System administrators will appreciate new management tools and expanded file-system options with improved performance and scalability.

Deployed on physical hardware, virtual machines, or in the cloud, Red Hat Enterprise Linux 7 delivers the advanced features required for next-generation architectures.

Where to go from here:

Red Hat Enterprise Linux 7 Product Page

The landing page for Red Hat Enterprise Linux 7 information. Learn how to plan, deploy, maintain, and troubleshoot your Red Hat Enterprise Linux 7 system.

Red Hat Customer Portal

Your central access point to finding articles, videos, and other Red Hat content, as well as manage your Red Hat support cases.

Documentation

Provides documentation related to Red Hat Enterprise Linux and other Red Hat offerings.

Red Hat Subscription Management

Web-based administration interface to efficiently manage systems.

Red Hat Enterprise Linux Product Page

Provides an entry point to Red Hat Enterprise Linux product offerings.

"""

# 1. 先拿出字符串里面的所有单词;

words = text.split() # ['hello', 'world', 'hello', 'python', 'hello', 'java']

"""

# text = "hello world hello python hello java"

# words = ['hello', 'world', 'hello', 'python', 'hello', 'java']

# word_count_dict = {

# 'hello': 3,

# 'world': 1,

# 'python':1,

# 'java':1

# }

"""

# 2. 统计每个单词出现的次数

# 1). 如何存储统计好的信息: 字典存储{'hello':3, 'world':1, 'python':1, 'java':1}

# 2). 如何处理?

word_count_dict = {}

for word in words:

if word not in word_count_dict:

word_count_dict[word] = 1

else:

word_count_dict[word] += 1

print(word_count_dict)

# 3. 排序,获取出现次数最多的单词

counter = Counter(word_count_dict)

print(counter.most_common(5))

结果:

c4cd4886afe3e32be253251e128f850c.png

switch语句实现

ac754c304054a6f6c395ed5a7965786e.png

35c4e39b15e4356a680f199dcffab776.png

6450d322d44611795ae0eeff5c8c3582.png

例:前k个高频

7deada90ee3a756748f99c9db1b95917.png

04 defaultdict

collections.defaultdict类,

本身提供了默认值的功能, 默认值可以是整形,列表,集合等.

defaultdict 是 dict 的子类。

但它与 dict 最大的区别在于,

如果程序试图根据不存在的 key 访问 value,会引发KeyError 异常;

而 defaultdict 提供default_factory 属性,该为不存在的 key 来自动生成生成默认的 value。

21898b00fdd8b26e6b1b157f95dd327a.png

d7bb00d7945fe32f804ec96ec7518e58.png

需求:

我们想要一个能将键(key)映射到多个值的字(即所谓的一键多值字典)

解决方案:

1). 字典是一种关联容器,每个键都映射到一个单独的值上。如果想让键映射到多个值,需要将这些多个

值保存到容器(列表或者集合)中。

2). 利用collections模块中的defaultdict类自动初始化第一个值,这样只需关注添加元素.

案例练习:用defaultDict来做一个练习,把list(随机生成50个1-100之间的随机数)中大于66的元素和小于66的元素

f178fa1f23d60d0f80f46ab4c4f3140a.png

059a01bd4c842a80f0037b11962c1991.png

05 内置数据结构总结

可变与不可变数据类型

可变数据类型:

可以增删改。可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等

这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,

不过对于相同的值的不同对象,在内存中则会存在不同的对象,

即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。

集合是可变类型

不可变数据类型:

不可以增删改。python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象。

有序序列和无序序列

有序序列拥有的特性: 索引、切片、连接操作符、重复操作符以及成员操作符等特性。

e0ebbe1fc5d77280f8e7c5aa675491ff.png

06 MD5在线加密解密工具

MD5在线加密解密工具

https://www.cmd5.com/,

本项目针对md5、sha1等全球通用公开的加密算法进行反向查询,通过穷举字符组合的方式,创建了明文密文对应查询数据库,创建的记录约90万亿条,占用硬盘超过500TB,查询成功率95%以上,很多复杂密文只有本站才可查询。已稳定运行十余年,国内外享有盛誉。

d9b2e1eb777f4b30bc32316b75a9c330.png

MD5简介

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。

MD5加密

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。hashlib库进行md5加密,

操作如下:

66e3144fe68ffe67a14d98d51e78608d.png

MD5解密

MD5目前人类是无法解密的,目前人类的MD5解密方法是建立一个大型数据库,将各

个人的MD5数据存储在这个数据库里面,然后将所需要解密的密码放入该库对比找到

同样原码,如果没有对比到数据,说明该密没有被记录过,也就是说没有办法解密了。

MD5在线加密解密工具

批量加密程序

1042de8ff7b0d7b4388d4d4098f18aec.png

e9f3612996d70762fb8c2a403cb5c8c4.png

运行效果:

57136b96225d8dbc0a313976092bf048.png

4f3716d8b43506da830812ca2224b69c.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值