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

相关文章
|
10天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
10天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
33 10
|
22天前
|
算法 Unix 数据库
Python编程入门:从基础到实战
本篇文章将带你进入Python编程的奇妙世界。我们将从最基础的概念开始,逐步深入,最后通过一个实际的项目案例,让你真正体验到Python编程的乐趣和实用性。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你提供有价值的信息和知识。让我们一起探索Python的世界吧!
|
24天前
|
并行计算 调度 开发者
探索Python中的异步编程:从基础到实战
在Python的世界里,异步编程是一种让程序运行更加高效、响应更快的技术。本文不仅会介绍异步编程的基本概念和原理,还将通过具体代码示例展示如何在Python中实现异步操作。无论你是初学者还是有经验的开发者,都能从中获益,了解如何运用这一技术优化你的项目。
|
23天前
|
数据处理 Python
探索Python中的异步编程:从基础到实战
在Python的世界中,“速度”不仅是赛车手的追求。本文将带你领略Python异步编程的魅力,从原理到实践,我们不单单是看代码,更通过实例感受它的威力。你将学会如何用更少的服务器资源做更多的事,就像是在厨房里同时烹饪多道菜而不让任何一道烧焦。准备好了吗?让我们开始这场技术烹饪之旅。
|
27天前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
29天前
|
算法 定位技术 Python
震惊!Python 图结构竟然可以这样玩?DFS&BFS 遍历技巧大公开
在 Python 编程中,图是一种重要的数据结构,而深度优先搜索(DFS)和广度优先搜索(BFS)是遍历图的两种关键算法。本文将通过定义图的数据结构、实现 DFS 和 BFS 算法,并通过具体示例展示其应用,帮助读者深入理解这两种算法。DFS 适用于寻找路径和检查图连通性,而 BFS 适用于寻找最短路径。掌握这些技巧,可以更高效地解决与图相关的复杂问题。
27 2
|
1月前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第36天】本文将带你走进Python的世界,从基础语法出发,逐步深入到实际项目应用。我们将一起探索Python的简洁与强大,通过实例学习如何运用Python解决问题。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供有价值的指导和灵感。让我们一起开启Python编程之旅,用代码书写想法,创造可能。
|
1月前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
65 4
|
1月前
|
Python
不容错过!Python中图的精妙表示与高效遍历策略,提升你的编程艺术感
本文介绍了Python中图的表示方法及遍历策略。图可通过邻接表或邻接矩阵表示,前者节省空间适合稀疏图,后者便于检查连接但占用更多空间。文章详细展示了邻接表和邻接矩阵的实现,并讲解了深度优先搜索(DFS)和广度优先搜索(BFS)的遍历方法,帮助读者掌握图的基本操作和应用技巧。
34 4