【Python练习cookbook】字典dictionary高级操作

Python编程基础:从语法到数据结构全面解析 Python作为一门解释型高级编程语言,以其简洁的语法和强大的标准库著称。其核心特性包括动态类型系统、自动内存管理和独特的缩进规则,这些设计使得Python代码更易读写。在数据结构方面,Python提供了列表、字典、集合等内置类型,配合列表推导式和生成器表达式能高效处理数据。面向对象编程特性如类继承和特殊方法,让Python既能快速开发原型也能构建复杂系统。掌握Python基础语法和数据结构是学习机器学习、Web开发等领域的前提,也是实现自动化脚本和数据分析的基础。 阅读详情

1.字典键-值对中,值元素的便捷创建增减

主要是利用collections 中的defaultdict

普通复杂过程:

pairs = [('a', 1), ('a', 2),('b', 2)]
d = {}
for key, value in pairs:
    if key not in d:
        d[key] = [] #指定值为list类型
    d[key].append(value)

或

d = {} #普通字典
d.setdefault('a', []).append(1)
d.setdefault('a', []).append(2)
d.setdefault('b', []).append(4)

当我们使用普通的字典时,还可以dict={},添加元素的只需要dict[element] =value,调用的时候也是如此,dict[element] ,但前提是element在字典里,如果不在字典里调用就会报错

利用defaultdict就没这些问题,且精简:

defaultdict接受一个工厂函数作为参数,如下来构造:

dict =defaultdict( factory_function)

这个factory_function可以是list、set、str等,有两个作用,第一是当调用的key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0,第二是可以对值做操作是调用相应类的函数

from collections import defaultdict

d = defaultdict(list)
for key, value in pairs:
    d[key].append(value)

d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
d['b'].append(4)

d = defaultdict(set)
d['a'].add(1)
d['a'].add(2)
d['b'].add(4)

2.创建带顺序的字典

from collections import OrderedDict

d = OrderedDict()
d['foo'] = 1
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4
# 输出 "foo 1", "bar 2", "spam 3", "grok 4"
for key in d:
    print(key, d[key])

若后续修改已插入的键值,不改变字典的顺序。顺序字典的内存开销是比较大的,若数据量很大(比如100,000条以上),则考虑使用其他结构保存数据。

 顺序字典的一个应用实例,json串构造:

>>> import json
>>> json.dumps(d)
'{"foo": 1, "bar": 2, "spam": 3, "grok": 4}'

 

3.字典排序相关

prices = {
    'ACME': 45.23,
    'AAPL': 612.78,
    'IBM': 205.55,
    'HPQ': 37.20,
    'FB': 10.75
}
# 通常:
min(prices)  # Returns 'AAPL'
max(prices)  # Returns 'IBM'
min(prices.values())  # Returns 10.75
max(prices.values())  # Returns 612.78

# 高级一点:
min(prices, key=lambda k: prices[k])  # Returns 'FB'
max(prices, key=lambda k: prices[k])  # Returns 'AAPL'
min_value = prices[min(prices, key=lambda k: prices[k])]
sorted(prices, key=lambda k: prices[k])# Returns ['FB', 'HPQ', 'ACME', 'IBM', 'AAPL']

# 以上都要想获取较全的键值信息都比较繁琐,可转化成(值,键)进行排序
min_price = min(zip(prices.values(), prices.keys()))
# min_price is (10.75, 'FB')
max_price = max(zip(prices.values(), prices.keys()))
# max_price is (612.78, 'AAPL')
prices_sorted = sorted(zip(prices.values(), prices.keys()))
# prices_sorted is [(10.75, 'FB'), (37.2, 'HPQ'),
# (45.23, 'ACME'), (205.55, 'IBM'),
# (612.78, 'AAPL')]

注意zip生成一个迭代器,只能用一次

另外:也可将字典转为list:li=list(prices.items()),用【Python练习册】heapq的应用 的方法来排序

 

4.两个字典间找异同--三种构造方式对比

dict.keys()和dict.items分别为dict_keys和dict_items对象,具体叫做keys-view和items-view对象,之所以叫view是因为,随着dict的变化,这些view也自动改变。keys-view和items-view对象支持常规set操作,如求交集、并集、差集等。

a = {
    'x': 1,
    'y': 2,
    'z': 3
}
b = {
    'w': 10,
    'x': 11,
    'y': 2
}
# 找相同键
a.keys() & b.keys()  # { 'x', 'y' }
# 找在a中不在b中的键
a.keys() - b.keys()  # { 'z' }
# 找相同元素
a.items() & b.items()  # { ('y', 2) }

# 移除特定键构建新字典
c = {key: a[key] for key in a.keys() - {'z', 'w'}}
# c is {'x': 1, 'y': 2}

#也可如下构造--最快,没有a[]的查询过程
p2 = { key:value for key,value in a.items() if key not in {'z', 'w'}}

#也可如下构造--最慢
p1 = dict((key, value) for key, value in a.items() if key not in {'z', 'w'})

注意:dict.values是values-view对象,但不支持常规set操作,因为value值可以不唯一

 

相关推荐

VS code平台调试AutoLISP程序教程

VS code平台调试AutoLISP程序教程

BearElder的博客 3184

python字典append,追加字典到列表中一个循环的Python

I am a basic python programmer so hopefully the answer to my question will be easy.I am trying to take a dictionary and append it to a list. The dictionary then changes values and then is appended aga...

weixin_35516624的博客 1357

国家医保移动支付国密算法SM2签名验签、SM4加解密DLL

DLL,非.net开发,所以无需安装配置,直接程序引用开发即可,支持各类开发语言。已知省份有广西、贵州、安徽、河北、黑龙江、湖南、吉林、江苏、四川、新疆等各地方。国家医保移动支付国密算法SM2签名验签、SM4加解密DLL。//SM4加密与解密。支持医保移动支付(国家统一版),//SM2签名与验签。

4264

python字典append_追加字典到列表中一个循环的Python

I am a basic python programmer so hopefully the answer to my question will be easy.I am trying to take a dictionary and append it to a list. The dictionary then changes values and then is appended aga...

weixin_39846089的博客 240

手把手教你用CH582的USB0/1双接口玩转CherryUSB协议栈(附完整代码)

本文深入解析CH582双USB接口硬件架构,详细讲解如何通过CherryUSB协议栈实现双接口协同工作,包括中断处理设计、端点资源分配和复合设备描述符配置。提供HID+CDC复合设备实战案例,并分享高级调试技巧与性能优化方法,帮助开发者充分利用CH582的USB0/1双接口潜力。

weixin_42525637的博客 264

2025年三级等保新规实战:从零开始搭建企业安全防护体系(附完整配置清单)

本文详细解析2025年三级等保新规的核心变化,提供从零开始搭建企业安全防护体系的实战指南。重点介绍动态防护能力、实战化攻防验证和全链路数据保护等关键要求,并附完整配置清单,帮助企业高效合规。

weixin_30836759的博客 468

python中的列表、元组、字典的介绍与使用

在 Python 中,列表(list)、元组(tuple)和字典(dictionary)是三种常见的数据结构。 列表是一有序的可变容器,可以包含多个元素。元组是一个有序的不可变容器。字典是一个无序的可变容器,用于存储键值对。 1.使用场景以及区别图 何时使用 列表:当你需要一个可修改、顺序的容器时。 元组:当你需要一个不可以修改的顺序容器时,通常用于函数返回多个值等。 字典:当你需要根据键快速查找值时,适用于存储关联数据。

快乐学习 3647

【QNX+Android虚拟化方案】00 - 系列文章链接汇总

【QNX+Android虚拟化方案】00 - 系列文章链接汇总

|~~~热爱生活、努力学习的小伙汁~~~| 1万+

Python中的列表list字典dictionary及集合set基本方法总结

Python中的字典(dictionary)是一种无序的数据集合,其中的元素以键值对的形式存储,键必须是唯一的且不可变的,而值则可以是任意类型的数据。

book_dw5189的博客 1023

【Zabbix实战之部署篇】Docker部署Zabbix+grafana监控平台

【Zabbix实战之部署篇】docker部署Zabbix+grafana监控平台

jks212454的博客 2578

Python实现多元线性回归(Multiple Linear Regression)

多元线性回归是一种用于建立多个自变量与因变量之间关系的统计学方法。在多元线性回归中,我们可以通过多个自变量来预测一个因变量的值。每个自变量对因变量的影响可以用回归系数来表示。

优快云 精品推荐 4331

Python 字典(Dictionary) setdefault()方法

一. 描述 Python 字典 setdefault() 函数,如果键不存在于字典中,将会添加键并将值设为默认值。 二. 语法 dict.setdefault(key, default=None) 参数:key -- 查找的键值。 default -- 键不存在时,设置的默认键值。 三. 例子 my_dict = {} my_dict.setdefault("guo", []).append("pei") pri...

guopeiAI 1356

24、中性原子量子计算:原理、方法与实验

本文系统介绍了中性原子量子计算的原理、方法与实验进展。重点阐述了利用碱金属原子作为量子比特,通过磁光阱、光偶极阱和光晶格等技术实现原子捕获与控制的方法。同时,详细分析了单量子比特门操作和量子态工程的实现手段,并总结了相关实验结果与未来发展方向。该技术路线为构建大规模量子计算系统提供了可行方案。

ol789012的博客 244

[Python Cookbook] Dictionary

Create a Dictionary from a Table 转载于:https://www.cnblogs.com/sherrydatascience/p/10360735.html

weixin_30851409的博客 64

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python Cookbook by Eric

Keywords: pip comprehension 1 变量 判断变量类型 # 判断变量是否是字符串 isinstance(a,str)

墨门 1507

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Python Cookbook 第二版 汉化版 [00-1-Info]

Python Cookbook 第二版 汉化版David Ascher, Alex Martelli, Anna Ravenscroft 著出版社: OReilly出版日期: March 2005ISBN: 0-596-00797-3页码数目: 844 页同本书第一版一样,第二版汇集了 Python 程序员遇到的常见问题的解决办法。第二版针对 Python 2.4 做了相应的更新,从简单任务

方舟 K ][ N G of A R K 2618

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python Cookbook 20160513

Python cookbook 1.1 - 1.5

FreesailX10i的博客 406

Python基础语法与开发环境配置指南

Python作为一门动态类型的高级编程语言,以其简洁优雅的语法结构和丰富的标准库著称。其核心设计哲学强调代码可读性,通过强制缩进规则和接近自然语言的表达方式降低学习门槛。在工程实践中,Python广泛应用于Web开发、数据分析、人工智能等领域,得益于其完善的生态系统和跨平台特性。开发环境配置是Python学习的第一步,推荐使用VS Code或PyCharm等现代化IDE,配合虚拟环境管理工具可有效隔离项目依赖。掌握基础语法后,开发者可以快速构建原型或实现复杂业务逻辑,这正是Python在数据科学和自动化脚本

weixin_30414305的博客 579

多维聚合实战:从Pandas透视表到OLAP引擎的系统化数据操作

多维聚合是现代数据分析的核心能力,本质是将扁平数据升维为可切片、钻取、上卷的立体立方体,支撑动态业务洞察。其底层依赖维度建模(如星型模式)与可加性度量设计,技术实现涵盖Pandas pivot_table、Doris、ClickHouse等多层架构选型。关键价值在于统一数据口径、加速自助分析、赋能实时BI看板,广泛应用于电商销售分析、客户分群、区域业绩归因等场景。本文聚焦Multi-Dimensional Aggregation与Data Manipulation在工程落地中的设计权衡、性能陷阱与口径治理实

weixin_34274029的博客 402

GPT-3微调实战:从数据准备到上线部署的全流程指南

大语言模型微调(Fine-tuning)是一种将通用预训练模型适配至垂直业务场景的关键技术,其核心原理是在冻结主干参数的前提下,利用少量高质量标注数据对模型输出层或适配器进行增量优化。相比提示词工程,它能显著提升响应确定性、降低延迟并增强领域一致性,技术价值体现在可复现、可审计、可规模化落地。典型应用场景包括金融合规问答、医疗文书生成、法律条款审查等高精度任务。本文聚焦OpenAI GPT-3系列(如davinci-002、curie-002)在Python环境下的工业级微调实践,覆盖JSONL数据格式规范

weixin_30905981的博客 409

python 的dict的append()?

看我下面这个表达,以为dict有append() #导入模块 import pandas as pd import numpy as np import xlrd #读Excel import xlwt #将内容写进Excel #打开excel文件1 workbook = xlrd.open_workbook(r'F:\\python\\test\\bb_6c.xlsx') sheet = workbook.sheet_by_index(0) rows = [sheet.row_valu

Python热爱者的博客 1万+

Python字典(Dictionary)操作全解【创建、读取、修改、添加、删除、有序字典、浅复制、排序】

字典是“键-值”对的无序可变序列,字典中的每个元素可以分为两部分,“键”和“值”。定义字典时,每个元素的“键”和“值”用冒号分隔,相邻元素之间用逗号分隔,所有元素放在一对大括号”{“和”}“中。字典中的“键”可以是Python中任意不可变数据,例如整数,实数,复数,字符串,元组等等,但不能使用列表、集合、字典作为字典的“键”,因为这些对象是可变的。另外,字典中的“键”不允许重复,而值是可以重复的...

THEAQING 3万+

Python 中的列表、字典和元组

公众号:原少子杨 列表 列表与字符串类似,也是一个序列,所不同的地方在于,字符串中的元素是字符,列表中的元素可以是任意类型,并且可以嵌套,例如,字典、元组、列表、字符串、数值类型都可以作为列表的元素。 创建列表 最简单的方式就是使用 [] 创建列表: >>> l = [] >>> l [] >>> l = ['str', 2.0, 5, ...

原少子杨 890

python列表嵌套字典append,从Python中的多个嵌套字典/列表创建树

前言:为了帮助解释我为什么要这样做,我将解释最终目标。实际上,我有一个用非常特殊的语法定义的帐户列表。以下是一些示例:Assets:Bank:CarAssets:Bank:HouseAssets:Savings:EmergencyAssets:Savings:Goals:RoofAssets:Reserved如上所示,一个帐户可以有任意数量的父母和子女。最终目标是用Python将上述帐户解析为一个...

weixin_32287563的博客 1472

Python字典实战题目练习,巩固知识、检查技术

本文主要是作为Python中列表的一些题目,方便学习完Python的列表之后进行一些知识检验,感兴趣的小伙伴可以试一试,含选择题、判断题、实战题,。通过这些题目,学习者可以检验自己对Python字典基础知识的掌握程度。编程不仅是技术的堆砌,更是灵魂的创造,每一次代码的跳动,都是向世界宣告你的不凡!

小白的大数据之旅的博客 3076

SDUT—Python程序设计实验六(字典与集合)

已知字典中有n个单词,现有m个不认识的单词,询问这m个单词是否出现在字典中,如果在字典中就输出其含义,如果不在字典中,就输出:Not found!图中有若干个顶点,每个顶点的表示方式为:顶点名称和该顶点相连的所有的其他顶点的名称,所组成的边的长度。第一行输入n,m (n>=0&&n=0&&m

qq_51774501的博客 5739
上一篇: 【Python练习cookbook】heapq高级应用
下一篇: 【Python练习cookbook】序列高级操作
Code_LT
博客等级 码龄10年 307粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值