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

相关文章
|
9天前
|
Python
Python的编辑工具-Jupyter notebook实战案例
这篇博客介绍了Jupyter Notebook的安装和使用方法,包括如何在本地安装Jupyter、启动和使用Jupyter Notebook进行编程、文档编写和数据分析,以及如何执行和管理代码单元(Cell)的快捷键操作。
20 4
Python的编辑工具-Jupyter notebook实战案例
|
9天前
|
Python
Python软件包及环境管理器conda实战篇
详细介绍了如何使用conda进行Python软件包管理及环境管理,包括查看、安装、卸载软件包,切换源,管理不同版本的Python环境,以及解决使用过程中可能遇到的错误。
32 2
Python软件包及环境管理器conda实战篇
|
1天前
|
数据采集 开发者 Python
探索Python中的异步编程:从基础到实战
【9月更文挑战第9天】本文将带你进入Python异步编程的世界,从理解其核心概念开始,逐步深入到实际应用。我们将一起构建一个小型的异步Web爬虫,通过实践学习如何在不阻塞主线程的情况下并发处理任务,优化程序性能。文章不仅包含理论知识,还提供代码示例,让读者能够动手实践,深刻理解异步编程的力量。
23 12
|
7天前
|
数据采集 机器学习/深度学习 数据挖掘
探索Python编程之美:从基础到实战
【9月更文挑战第3天】本文旨在通过深入浅出的方式,带领读者领略Python编程语言的魅力。我们将从基本语法入手,逐步深入至高级特性,最终通过实战案例将理论知识与实践操作相结合。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
1天前
|
安全 数据安全/隐私保护 Python
Python系统编程实战:文件系统操作与I/O管理,让你的代码更优雅
【9月更文挑战第10天】Python不仅在数据分析和Web开发中表现出色,在系统编程领域也展现出独特魅力。本文将带你深入探讨Python中的文件系统操作与I/O管理,涵盖os、shutil和pathlib等模块的基础使用方法,并通过示例代码展示如何优雅地实现这些功能。通过掌握缓冲、异步I/O等高级特性,你将能够编写更高效、安全且易于维护的Python代码。示例包括使用pathlib遍历目录、设置缓冲区提升文件写入性能以及使用aiofiles实现异步文件操作。掌握这些技能,让你在Python系统编程中更加得心应手。
10 2
|
4天前
|
数据采集 机器学习/深度学习 存储
Python编程入门:从基础到实战
【9月更文挑战第6天】本文将引导你走进Python的世界,从零基础开始,逐步掌握Python的基础语法和常用库。我们将通过实例讲解,让你在轻松愉快的氛围中学习Python编程。最后,我们还将分享一些实用的技巧和资源,帮助你在学习过程中不断进步。让我们一起开启Python编程之旅吧!
25 4
|
6天前
|
数据采集 Python
探索Python中的异步编程:从基础到实战
【9月更文挑战第4天】在Python的海洋中,异步编程犹如一艘快艇,让你的代码在执行效率和响应速度上破浪前行。本文将带你从理解“异步”这一概念出发,深入到Python的asyncio库的使用,再到构建一个实际的异步Web爬虫项目,体验异步编程的魅力。我们将避开枯燥的理论,通过生动的比喻和直观的代码示例,让异步编程的知识活灵活现。
|
6天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【9月更文挑战第5天】性能测试是确保应用在高负载下稳定运行的关键。本文介绍Apache JMeter和Locust两款常用性能测试工具,帮助识别并解决性能瓶颈。JMeter适用于测试静态和动态资源,而Locust则通过Python脚本模拟HTTP请求。文章详细讲解了安装、配置及使用方法,并提供了实战案例,帮助你掌握性能测试技巧,提升应用性能。通过分析测试结果、模拟并发、检查资源使用情况及代码优化,确保应用在高并发环境下表现优异。
28 5
|
5天前
|
机器学习/深度学习 算法 Python
决策树下的智慧果实:Python机器学习实战,轻松摘取数据洞察的果实
【9月更文挑战第7天】当我们身处数据海洋,如何提炼出有价值的洞察?决策树作为一种直观且强大的机器学习算法,宛如智慧之树,引领我们在繁复的数据中找到答案。通过Python的scikit-learn库,我们可以轻松实现决策树模型,对数据进行分类或回归分析。本教程将带领大家从零开始,通过实际案例掌握决策树的原理与应用,探索数据中的秘密。
14 1
|
6天前
|
测试技术 Apache 数据库
从慢如蜗牛到飞一般的感觉!Python性能测试实战,JMeter&Locust助你加速🏃‍♂️
【9月更文挑战第6天】你的Python应用是否曾因响应缓慢而让用户望而却步?借助JMeter与Locust,这一切将迎刃而解。JMeter作为Apache基金会的明星项目,以其强大的跨平台和多协议支持能力,成为性能测试领域的魔法师;而Locust则以Python的简洁与高效,让性能测试更加灵活。通过实战演练,你可以利用这两款工具轻松识别并解决性能瓶颈,优化数据库查询、网络配置等,最终使应用变得敏捷高效,轻松应对高并发挑战。
9 1