Python基础 part8 字符定义的类型 dict

本文深入解析Python字典的定义、特性及操作方法,包括添加、删除、查看等关键功能,并通过实例演示数字重复统计和单词频率计算。

dict 字典

定义字典

字典的内容是包括key值和value值,一个key值可以对应多个value值,key值不能重复
在这里插入图片描述
对应多个value值:
在这里插入图片描述

定义空字典
在这里插入图片描述
在这里插入图片描述

定义嵌套字典
可以在字典中再定义详细的字典信息,如下:
在这里插入图片描述
需要寻找指定的信息时可以具体的指定

字典的特殊定义方式
print({}.fromkeys({i for i in range(3)},{i for i in range(5)}))
{i for i in range(3)}表示的是key值;
{i for i in range(5)}表示的value值。
在这里插入图片描述

dict 的特性

for循环
在这里插入图片描述
索引、切片、重复、连接、成员操作符等操作是不支持的

dict 添加

在这里插入图片描述
在这里插入图片描述

当需要添加的key值和value值都不在字典中时会添加,如果key值存在会更新value值

.update()
字典可以合并其他的字典
在这里插入图片描述

也可以直接进行批量添加或更新
在这里插入图片描述
.setdefault()

这种方式的添加,如果添加的key值存在,不做不做变动,如果不存在进行添加
在这里插入图片描述

dict的删除

del删除指定的key值和它的value值
在这里插入图片描述
.pop()
弹出key值,不会在内存中删除
在这里插入图片描述

.popitem()
弹出最后一个值
在这里插入图片描述
.clear()
清空字典
在这里插入图片描述

dict 的查看

查看全部的key值或全部的value值
在这里插入图片描述

.items()
查看所有字典中的值
在这里插入图片描述
查看指定的key值
在这里插入图片描述
如果查看的key值不存在就会显示不存在
在这里插入图片描述

练习

练习1
数字重复统计:
1). 随机生成1000个整数;
2). 数字的范围[20, 100],
3). 升序输出所有不同的数字及其每个数字重复的次数;

import random
all_num = []
for i in range(1000):		#生成1000个20-100的随机数
    all_num.append(random.randint(20,100))

sort_num = sorted(all_num)		#排序
dict_num = {}
for n in sort_num:		#查看重复次数
    if n in dict_num:
        dict_num[n] += 1
    else:
        dict_num[n] = 1
print(dict_num)

练习2
重复的单词: 此处认为单词之间以空格为分隔符, 并且不包含,和.;
# 1. 用户输入一句英文句子;
# 2. 打印出每个单词及其重复的次数;
“hello java hello python”
hello 2
java 1
python 1

Word = input().split()
Word_dict = {}

for I in Word:
    if I in Word_dict:
        Word_dict[I] += 1
    else:
        Word_dict[I] = 1

print(Word_dict)
<think>我们被要求回答关于Python字符串分割的问题,参考了站内引用中的内容,特别是引用[1][2][3]都提到了split()方法。 用户的问题:如何将字符串分割成子字符串? 我们将详细介绍Python字符串分割的几种方法,重点介绍split()方法,同时也会提到其他相关方法如rsplit(), splitlines()和正则表达式分割。 注意:根据引用内容,用户可能对split()函数的基本用法和实现原理感兴趣。 回答结构: 1. 使用split()方法进行基本分割 2. 使用rsplit()方法从右边开始分割 3. 使用splitlines()方法按行分割 4. 使用正则表达式re.split()进行复杂分割 5. 自定义分割函数(如引用[2]提到的实现类似split的算法) 6. 分割回文串的例子(引用[5])作为应用示例 注意:在回答中,我们将使用代码示例来展示每种方法。</think># Python 字符串分割方法详解 在 Python 中,字符串分割是将一个字符串拆分为多个子字符串的常见操作,主要通过 `split()` 方法实现,但也支持其他高级方法。下面详细介绍各种分割技术: ## 1. 基本分割:split() 方法 `split()` 方法是 Python 中最常用的字符串分割方法,它根据指定的分隔符将字符串拆分为子字符串列表。 ```python # 基本用法:默认使用空格作为分隔符 text = "Python is a powerful programming language" words = text.split() print(words) # 输出: ['Python', 'is', 'a', 'powerful', 'programming', 'language'] # 指定分隔符 csv_data = "apple,banana,orange,grape" fruits = csv_data.split(',') print(fruits) # 输出: ['apple', 'banana', 'orange', 'grape'] # 限制分割次数 log_entry = "2023-07-25 14:30:22 ERROR Connection failed" parts = log_entry.split(' ', 2) # 只分割前2个空格 print(parts) # 输出: ['2023-07-25', '14:30:22', 'ERROR Connection failed'] ``` ## 2. 从右侧分割:rsplit() 方法 当需要从字符串右侧开始分割时,可以使用 `rsplit()` 方法: ```python # 从右侧分割 path = "/usr/local/bin/python" dirs = path.rsplit('/', 1) # 只分割最后一个斜杠 print(dirs) # 输出: ['/usr/local/bin', 'python'] # 文件扩展名提取 filename = "document.report.final.pdf" name, ext = filename.rsplit('.', 1) print(f"文件名: {name}, 扩展名: {ext}") # 输出: 文件名: document.report.final, 扩展名: pdf ``` ## 3. 按行分割:splitlines() 方法 处理多行文本时,`splitlines()` 方法可以按换行符分割: ```python # 按行分割 multiline_text = """第一行内容 第二行内容 第三行内容""" lines = multiline_text.splitlines() print(lines) # 输出: ['第一行内容', '第二行内容', '第三行内容'] # 保留换行符 lines_with_breaks = multiline_text.splitlines(keepends=True) print(lines_with_breaks) # 输出: ['第一行内容\n', '第二行内容\n', '第三行内容'] ``` ## 4. 正则表达式分割:re.split() 对于复杂的分割需求,可以使用正则表达式实现更灵活的分割: ```python import re # 使用多个分隔符 text = "apple, banana; orange. grape|melon" items = re.split(r'[,;.|\s]\s*', text) print(items) # 输出: ['apple', 'banana', 'orange', 'grape', 'melon'] # 保留分隔符 text = "3+5*2-8/4" parts = re.split(r'([+\-*/])', text) print(parts) # 输出: ['3', '+', '5', '*', '2', '-', '8', '/', '4'] ``` ## 5. 高级分割技巧 ### 分割并去除空白 ```python # 分割并去除空白 data = " Python, Java, C++ , JavaScript " languages = [lang.strip() for lang in data.split(',')] print(languages) # 输出: ['Python', 'Java', 'C++', 'JavaScript'] ``` ### 多次分割处理嵌套结构 ```python # 处理嵌套结构 config = "server:port=8080;database:host=localhost,user=admin" servers = {} for part in config.split(';'): key, values = part.split(':') servers[key] = dict(item.split('=') for item in values.split(',')) print(servers) # 输出: {'server': {'port': '8080'}, 'database': {'host': 'localhost', 'user': 'admin'}} ``` ### 分割回文串(引用[5]示例) ```python # 分割回文串(递归实现) def partition(s): def is_palindrome(sub): return sub == sub[::-1] def dfs(start, path): if start == len(s): result.append(path[:]) return for end in range(start + 1, len(s) + 1): prefix = s[start:end] if is_palindrome(prefix): dfs(end, path + [prefix]) result = [] dfs(0, []) return result print(partition("aab")) # 输出: [['a', 'a', 'b'], ['aa', 'b']] ``` ## 性能考虑 对于大型字符串处理: 1. 优先使用 `split()` 等内置方法,它们经过高度优化 2. 避免在循环中进行不必要的分割操作 3. 考虑使用生成器表达式处理流式数据 ```python # 高效处理大文件 with open('large_file.txt') as f: for line in f: fields = line.split(',') # 逐行处理 # 处理逻辑... ``` 掌握这些字符串分割技术,可以高效处理各种文本解析任务。根据具体需求选择合适的方法:简单分隔用 `split()`,复杂模式用正则表达式,多行文本用 `splitlines()`[^1][^2][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Howei__

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

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

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

打赏作者

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

抵扣说明:

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

余额充值