Python 字典遍历、缺省字典、有序字典实战|学习笔记

简介: 快速学习 Python 字典遍历、缺省字典、有序字典实战

开发者学堂课程【Python 开发基础入门Python 字典遍历、缺省字典、有序字典实战】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/556/detail/7658


Python 字典遍历、缺省字典、有序字典实战

内容介绍:

一、字典简介

二、字典遍历

三、字典遍历和移除

四、字典的key

五、Defaultdict

六、OrderedDict

七、字典练习

 

一、字典简介

d=dict()或者d{}

dict(**kwargs)使用name=value对初始化一个字典

dict(iterable,*kwarg)使用可迭代对象和name=value对构造字典,不过可迭代对象的元素必须是一结构

d = dict(((1,'a'),(2,'b')))或者d-= dict(([1,'a'],[2,'b']))

dict(mapping, **kwarg)使用一个字典构建另一个字典

d = {'a':10, 'b':20, 'c':None, 'd":[1,2.3])

类方法dict.fromkeys(iterable, value)

d = dict.fromkeys(range(5))

d = dict.fromkeys(range(5),0)

注:红色标记部分是较为常用的

字典元素的访问:

d[key]

返回key对应的值value

key不存在抛出KeyError异常

get(keyL, default])

返回key对应的值value

key不存在返回缺省值,如果没有设置缺省值就返回None

setdefault(key[, default])

//setdifault 使用的相对较少

返回key对应的值value

key不存在,添加kv对,value为default,并返回default,如果default没有设置,缺省为None

字典元素的增加:

d[key] = value

key对应的值修改为value

key不存在添加新的kv

update([other]) -> None

使用另一个字典的kv对更新本字典

key不存在,就添

key存在,覆盖已经存在的key对应的值

就地修改

d.update(red=1)

d.update((('red" ,2).))

d.update(['red':3)

字典的删除:

pop(keyL, default])

key存在,移除它,并返回它的value

key不存在,返回给定的default

default未设置,key不存在则抛出KeyError异

popitem()

移除并返回一个任意的键值对

字典为empty,抛出KeyError异常

clear()

//需要考虑垃圾回收的问题

清空字典

del语句

a = Trueb=[6]

d = ('a : 1, 'b: b, 'c':[1,3,5]}

del a

del d['c']#删除了一个对象[1,3,5]?

del b[0]

c=bdel cdel b

b = d['b']

del a[c]看着像删除了一个对象,本质上减少了一个对象的引用,del 实际上删除的是名称,而不是对象

 

二、字典遍历

for ... in dict

遍历value

forkind:

print(d[k])

for k in d.keys():

print(d.get(k))

for v in d.values():

print(v)

实操演示:

d

{ 'a ': 1,'b': [], 'c': 200 }

d [ 'c'] = 200

for i in d:

print (i)

a

cb

for i in d.keys ( ) :

print (i)

a

cb

注意:一个常见的错误

分析:书写不规范导致报错,注意书写规范即可

//对以上错误代码进行以下调整即可

d[ ( 'd' ,300) ] = 300

for i,v in d:

print (i)

D

//上面的这种写法与下面的写法是等价的,效果是相同的

for i in d.keys ():

print (i)

//这两种写法拿到的都是key

D[(d,300)] = 300

For i,v in d:

Print(i)

D

for val in d.values () :

print (val)

300

1200[ ]

for key in d.keys () :

print (d [ key])

//items方法取值

for val in d.values () :

print (val)

300

1200[ ]

for key in d.keys () :

print (d [ key])

总结:

Python3 中,keys、values、 items 方法返回一 个类似一个生成器的可迭代对象 ,不会把函数的返回结果复制到内存中.

Dictionary view对象

字典的 entry 的动态的视图,字典变化,视图将反映出这些变化

Python2中,上面的方法会返回一一个新的列表,占据新的内存空间。

所以 Python2 建议使用 iterkeys、itervalues、iteritems 版本 ,返回一个迭代器,而不是一个 copy

//迭代器部分代码展示

for k in d:

print (k)

d.pop (k)

('d', 300)

//出现运行异常的报错

//正确的做法是

while len (d):

d.popitem()

lst = []

for k in d.keys ():

print (k)

if isinstance (d[k], str) :

lst.append (k)

for k in lst:

d.pop (k)# okT

{ }

 

三、字典遍历和移除

如何在遍历的时候移除元素

1. 错误的做法

d = dict(a=1, b=2, c='abc')

for k,v in d.items():

d.pop(k) #异常

while len(d): #相当于清空,不如直接clear()

print(d.popitem()

2. 正确的做法

d- dict(a=1, b=2, c='abc')

keys.=0

for k,v in d.items():

if isinstance(v, str):

keys.append(k)

for k in keys:


四、字典的 key

key 的要求和 set 的元素要求一致

set 的元素可以就是看做 key,set 可以看做 dict 的简化版

hashable 可哈希才可以作为 key,可以使用 hash() 测试

d= {1:0, 2.0:3, "abc": None, (hello', 'world', python'): "string", b'abc' : '135'}

 

五、defaultdict

collections.defaultdict([default_ factory[, .]

第一个参数是 default._factory ,缺省是 None,它提供一个初始化函数。

当 key 不存在的时候,会调用这个工厂函数来生成 key 对应的 value

import random

d1= {}

for k in 'abcdef':

for i in range(random.randint(1,5)):

if k not in d1.keys():

d1[k]= 0]

d1[k].append(i)

print(d1)

from collections import defaultdict

import random

d1 = defaultdict(list)

for k in 'abcdef':

for i in range(random.randint(1,5)):

d1[k].append()

print(d1)

实操演示:

import random

d = { }

for c in ' abcde ' :

for i in range (5) :

if not d.get (c) :

d[c] = []

d[c].append (i)

print(d)

{ 'e ' : [0],'d ' : [0,1,2,3,4],'a': [0],'c':[0,1,2],'b': [0,1,2]})

import random

from collections import defaultdict

#d = { }

d = defaultdict (list)for c in ' abcde ' :

for i in range (random.randint (1,5)) :

d ic].append (i)

print (d)

defaultdict(,{'e ': [0,1,2,3,4], 'd': [0,1,2,3],

' a' :[ o, 1,2], 'c' :

[ 0],'b': [0,1]})

image.png

$cd magedu/projects/test/

$python

$pyenv local 3.6.3

$python -v

$ipython

$pip -v

>>>d = {}

>>>d = dict(a=1,b=2,c=3,d=400)

>>>d

{‘a’:1,’b’:2,’c’:3,’d’:400}

>>>d [100] = ‘abc’

>>>d

{‘a’:1,100:’abc’,’d’:100,’b’:2,’c’:3}

>>>d[0]=’abc’

>>>d

{0:’abc’,’d’:2,’c’:3,’d’:400,100:’abc’,0:’abc’}

>>>

from collections import OrderedDict

od = OrderedDict (a=1,b=2,c=3, d=4)

od [100] = 100

od[0] = 0

od

orderedDict( [ ('d ',4),('a ',1),( 'c',3),('b',2),(100,100),(0,0)])

 

六、OrderedDict

collections.OrderedDict([items])

key并不是按照加入的顺序排列正可以使用OrderedDict记录顺序

from collections import OrderedDict

import random

d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}

print(d)

keys = list(d.keys()

random.shuffle(keys)

print(keys)

od = OrderedDict()

for key in keys:

od[key] = d[key]

print(od)

print(od.keys0)

有序字典可以记录元素插入的顺序,打印的时候也是按照这个顺序输出打印

3.6版本的 Python 的字典就是记录 key 插入的顺序( IPython不一定有效果)

应用场景:

假如使用字典记录了N个产品,这些产品使用ID由小到大加入到字典中

除了使用字典检索的遍历,有时候需要取出ID,但是希望是按照输入的顺序,因为输入顺序是有序的

否则还需要重新把遍历到的值排序

 

七、字典练习

字典练习

用户输入一个数字

打印每一位数字及其重复的次数

数字重复统计

随机产生100个整数

数字的范围[-1000, 1000]

升序输出所有不同的数字及其重复的次数

字符串重复统计

字符表abcdefghijklmnopqrstuvwxyz'

随机挑选2个字母组成字符串,共挑选100个

降序输出所有不同的字符串及重复的次数

 

八、字典 key

key 的要求和 set 的元素要求一致

set 的元素可以就是看做 key , set 可以看做 dict 的简化版

hashable 可哈希才可以作为 key,可以使用 hash()测试

d={1:0,2.0:3, "abc": None, ('hello 'world , python') : "string", b'abc': '1353

相关文章
|
11天前
|
移动开发 Unix Linux
Python 遍历文件每一行判断是否只有一个换行符详解
**Python 检查文件每行换行符:** 文章探讨了在Python中验证文件每行是否仅含一个换行符的需求。通过提供代码示例,展示了如何打开文件,遍历行,判断行尾的换行情况。基础实现检查`\n`,扩展版考虑了`\r\n`,并可选地将结果保存至新文件。这些功能有助于确保数据格式规范。
21 0
|
2天前
|
数据采集 JSON 数据可视化
【Python实战】Python对中国500强排行榜数据进行可视化分析
【Python实战】Python对中国500强排行榜数据进行可视化分析
|
15天前
|
数据采集 数据可视化 数据挖掘
数据挖掘实战:使用Python进行数据分析与可视化
在大数据时代,Python因其强大库支持和易学性成为数据挖掘的首选语言。本文通过一个电商销售数据案例,演示如何使用Python进行数据预处理(如处理缺失值)、分析(如销售额时间趋势)和可视化(如商品类别销售条形图),揭示数据背后的模式。安装`pandas`, `numpy`, `matplotlib`, `seaborn`后,可以按照提供的代码步骤,从读取CSV到数据探索,体验Python在数据分析中的威力。这只是数据科学的入门,更多高级技术等待发掘。【6月更文挑战第14天】
50 11
|
6天前
|
机器学习/深度学习 数据处理 索引
Python遍历矩阵的技巧与实践
Python遍历矩阵的技巧与实践
17 2
|
5天前
|
Python
python之字符串定义、切片、连接、重复、遍历、字符串方法
python之字符串定义、切片、连接、重复、遍历、字符串方法
6 0
python之字符串定义、切片、连接、重复、遍历、字符串方法
|
6天前
|
SQL 关系型数据库 数据库连接
Python连接线上数据库的实战指南
Python连接线上数据库的实战指南
13 1
|
15天前
|
数据采集 存储 数据挖掘
Python网络爬虫实战:抓取并分析网页数据
使用Python的`requests`和`BeautifulSoup`,本文演示了一个简单的网络爬虫,抓取天气网站数据并进行分析。步骤包括发送HTTP请求获取HTML,解析HTML提取温度和湿度信息,以及计算平均温度。注意事项涉及遵守robots.txt、控制请求频率及处理动态内容。此基础爬虫展示了数据自动收集和初步分析的基础流程。【6月更文挑战第14天】
96 9
|
15天前
|
数据采集 机器学习/深度学习 数据可视化
数据挖掘实战:Python在金融数据分析中的应用案例
Python在金融数据分析中扮演关键角色,用于预测市场趋势和风险管理。本文通过案例展示了使用Python库(如pandas、numpy、matplotlib等)进行数据获取、清洗、分析和建立预测模型,例如计算苹果公司(AAPL)股票的简单移动平均线,以展示基本流程。此示例为更复杂的金融建模奠定了基础。【6月更文挑战第13天】
67 3
|
16天前
|
数据采集 前端开发 Python
Python3网络开发实战读后感
Python3网络开发实战读后感
|
2天前
|
数据采集 XML 存储
【Python实战】Python多线程批量采集图片
【Python实战】Python多线程批量采集图片