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

相关文章
|
28天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
79 6
|
28天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
138 45
|
17天前
|
算法 定位技术 Python
震惊!Python 图结构竟然可以这样玩?DFS&BFS 遍历技巧大公开
在 Python 编程中,图是一种重要的数据结构,而深度优先搜索(DFS)和广度优先搜索(BFS)是遍历图的两种关键算法。本文将通过定义图的数据结构、实现 DFS 和 BFS 算法,并通过具体示例展示其应用,帮助读者深入理解这两种算法。DFS 适用于寻找路径和检查图连通性,而 BFS 适用于寻找最短路径。掌握这些技巧,可以更高效地解决与图相关的复杂问题。
27 2
|
19天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第36天】本文将带你走进Python的世界,从基础语法出发,逐步深入到实际项目应用。我们将一起探索Python的简洁与强大,通过实例学习如何运用Python解决问题。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供有价值的指导和灵感。让我们一起开启Python编程之旅,用代码书写想法,创造可能。
|
21天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
53 4
|
21天前
|
Python
不容错过!Python中图的精妙表示与高效遍历策略,提升你的编程艺术感
本文介绍了Python中图的表示方法及遍历策略。图可通过邻接表或邻接矩阵表示,前者节省空间适合稀疏图,后者便于检查连接但占用更多空间。文章详细展示了邻接表和邻接矩阵的实现,并讲解了深度优先搜索(DFS)和广度优先搜索(BFS)的遍历方法,帮助读者掌握图的基本操作和应用技巧。
34 4
|
20天前
|
机器学习/深度学习 数据可视化 数据处理
Python数据科学:从基础到实战
Python数据科学:从基础到实战
26 1
|
21天前
|
机器学习/深度学习 JSON API
Python编程实战:构建一个简单的天气预报应用
Python编程实战:构建一个简单的天气预报应用
35 1
|
22天前
|
算法 Python
Python图论探索:从理论到实践,DFS与BFS遍历技巧让你秒变技术大牛
图论在数据结构与算法中占据重要地位,应用广泛。本文通过Python代码实现深度优先搜索(DFS)和广度优先搜索(BFS),帮助读者掌握图的遍历技巧。DFS沿路径深入搜索,BFS逐层向外扩展,两者各具优势。掌握这些技巧,为解决复杂问题打下坚实基础。
30 2
|
29天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
85 7