0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python通过序列生成字典

python爬虫知识分享 来源:python爬虫知识分享 作者:python爬虫知识分享 2022-03-29 17:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

通过序列生成字典

我们将下面的序列转换为dict类型。

lst=[('a',1),('b',2),('c',3)]

普通的写法

fork,vinlst:
dic[k]=v

pythonic的写法

利用字典推导式快速生成字典。

{k:vfork,vinlst}

key的默认值

当指定key不存在时,将value设置为 0。

普通的写法

ifkeynotindct:
dct[key]=0

pythonic的写法

dct[key]=dct.get(key,0)

交换key与value

普通的写法

dic={'Python':1,'Java':2}
new_dic={}
fork,vindic.items():
new_dic[v]=k

pythonic的写法

dic={'Python':1,'Java':2}
new_dic={v:kfork,vindic.items()}

序列修改和初始化

示例数据

lst=[('a',1),('b',2),('c',3)]
dic={'a':[0]}

如果我们需要根据lst来更新dic中的数据,当key存在,则将value添加到原序列末尾,否则初始化value并用序列保存。

普通的写法

forkey,valueinlst:
ifkeyindic:
dic[key].append(value)
else:
dic[key]=[value]

pythonic的写法

for(key,value)inlst:
group=dic.setdefault(key,[])
group.append(value)
# dic:{'a':[0, 1], 'b':[2], 'c':[3]}

setdefault(key, default)会先判断key是否存在,存在则返回dct[key], 不存在则把dct[key]设为 [] 并返回。

key,items的集合运算

如果我们现在需要获取两个字典的key相交的部分的映射信息。

普通的写法

dic1={'Python':1,'Java':2,'C':3}
dic2={'Python':3,'Java':2,'C++':1}

new_dic={}
fork,vindic1.items():
ifkindic2.keys():
new_dic[k]=v
print(new_dic)

#{'Python':1,'Java':2}

pythonic的写法

dic1={'Python':1,'Java':2,'C':3}
dic2={'Python':3,'Java':2,'C++':1}

print({k:dic1[k]forkindic1.keys()&dic2.keys()})

#{'Python':1,'Java':2}

这里的dic1.keys() & dic2.keys()用到的就是keys()进行集合运算,items()同样可以进行集合运算。

如果现在我们要获取两个字典中key,value完全相同的部分。

dic1={'Python':1,'Java':2,'C':3}
dic2={'Python':3,'Java':2,'C++':1}

print(dic1.items()&dic2.items())

#{('Java',2)}

灵活运用 keys,items() 集合运算的特性,可以快速提取我们想要的内容。

按key或value对字典排序

使用sorted()函数快速实现对keyvalue的排序。

dic={'a':2,'b':1,'c':3,'d':0}
lst1=sorted(dic.items(),key=lambdax:x[0],reverse=False)
#[('a',2),('b',1),('c',3),('d',0)]
lst2=sorted(dic.items(),key=lambdax:x[1],reverse=False)
#[('d',0),('b',1),('a',2),('c',3)]
print('按照键降序:',{key:valueforkey,valueinlst1})
print('按照值降序:',{key:valueforkey,valueinlst2})

#按照键降序:{'a': 2, 'b': 1, 'c': 3, 'd':0}
#按照值降序:{'d':0, 'b': 1, 'a': 2, 'c': 3}

多个字典排序

如果一个序列中包含多个字典,现在要根据条件对这些字典继续排序。同样可以使用sorted()函数来实现。

dict_list=[
{'letter':'B','number':'2'},
{'letter':'A','number':'3'},
{'letter':'B','number':'1'}
]

#按letter排序
print(sorted(dict_list,
key=lambdadic:dic['letter']))
#按letter,number排序
print(sorted(dict_list,
key=lambdadic:(dic['letter'],dic['number'])))

#[{'letter':'A','number':'3'},{'letter':'B','number':'2'},{'letter':'B','number':'1'}]
#[{'letter':'A','number':'3'},{'letter':'B','number':'1'},{'letter':'B','number':'2'}]

当然,如果你知道itemgetter()的话,上面的代码就可以改变一下,执行速度会更快。

fromoperatorimportitemgetter

print(sorted(dict_list,
key=itemgetter('letter')))
print(sorted(dict_list,
key=itemgetter('letter','number')))

itemgetter()获取的不是值,而是定义了一个函数,通过该函数作用到目标对象上。
审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66894
  • python
    +关注

    关注

    57

    文章

    4859

    浏览量

    89633
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ATA-D60090功率放大器在时间调制序列生成中的应用

    利用计算机生成波束扫描所需的的波束扫描的时间编码序列。根据时间编码序列,任意信号发生器产生的方波信号通过功率放大器产生控制电压信号。
    的头像 发表于 11-30 14:27 297次阅读
    ATA-D60090功率放大器在时间调制<b class='flag-5'>序列</b><b class='flag-5'>生成</b>中的应用

    思必驰一鸣智能客服大模型通过生成式人工智能服务备案

    近日,江苏网信发布新一批生成式人工智能服务备案信息,其中,由思必驰控股子公司驰必准自主研发的一鸣智能客服大模型通过生成式人工智能服务管理暂行办法》备案。
    的头像 发表于 09-16 18:08 988次阅读

    中车斫轮大模型通过国家生成式人工智能服务备案

    9月14日,国家互联网信息办公室发布最新公告,“中车斫轮”大模型通过生成式人工智能服务”备案,标志着其在数据安全治理、模型机制透明度、内容生成合规性等核心维度已全面对标国家监管要求,正式具备向行业
    的头像 发表于 09-16 09:16 646次阅读

    canopen如何通过对象字典控制外设?

    各位大佬好,我在移植canopen的时候碰到一个疑问。比如我修改对象字典2000,子索引为0这个目录下的值,如何这个对象映射的是某个led灯的亮灭,输入1为亮,0为灭。 问题就是我发送报文之后会进入
    发表于 09-11 06:04

    termux调试python猜数字游戏

    实现(Python版) ```python import random def guess_number(): # 生成随机数字(1-100) secret_number
    发表于 08-29 17:15

    termux如何搭建python游戏

    模拟器,支持通过APT包管理器安装软件。搭建Python游戏开发环境前需完成以下基础配置: 1. 更换国内源 为提升下载速度,需替换Termux默认源为清华源,执行以下命令: ```bash
    发表于 08-29 07:06

    NVIDIA recsys-examples在生成式推荐系统中的高效实践

    生成式 AI 浪潮的推动下,推荐系统领域正经历深刻变革。传统的深度学习推荐模型 (DLRMs) 虽已展现出一定效果,但在捕捉用户兴趣偏好和动态行为序列变化时,常面临可扩展性挑战。生成式推荐系统 (Generative Reco
    的头像 发表于 07-04 14:43 852次阅读
    NVIDIA recsys-examples在<b class='flag-5'>生成</b>式推荐系统中的高效实践

    基础篇3:掌握Python中的条件语句与循环

    : print(\"你还很小。\") 循环 循环允许程序重复执行一段代码,直到满足某个条件为止。Python中有几种不同的循环结构。 for循环 for循环通常用于遍历序列(如列表、元组
    发表于 07-03 16:13

    python入门圣经-高清电子书(建议下载)

    和Pygal 等强大的Python 库和工具介绍,以及列表、字典、if 语句、类、文件与异常、代码测试等内容; 第二部分将理论付诸实践,讲解如何开发三个项目,包括简单的Python 2D 游戏开发如何利用数据
    发表于 04-10 16:53

    声智APP通过北京市生成式人工智能服务登记

    近日,声智APP已正式通过北京市第二批生成式人工智能服务登记,成为《生成式人工智能服务管理暂行办法》(以下简称《办法》)实施以来,北京市累计已完成46款生成式人工智能服务登记中的重要一
    的头像 发表于 03-19 16:33 827次阅读

    ​Diffusion生成式动作引擎技术解析

    Diffusion生成式动作引擎 Diffusion生成式动作引擎是一种基于扩散模型(Diffusion Models)的生成式人工智能技术,专注于生成连续、逼真的人类动作或动画
    的头像 发表于 03-17 15:14 2732次阅读

    dlp3010如何通过RGB888通道,让dlp3010投影序列图?

    想请问下,dlp3010如何通过RGB888通道,让dlp3010投影序列图,dlpc3479+dlpa2005,扫描方式有没有参考
    发表于 02-25 07:25

    Python中的迭代器与生成

    Python迭代器与生成器 列表生成式 列表生成式也叫做列表推导式,它本身还是列表,只不过它是根据我们定义的规则来生成一个真实的列表。  
    的头像 发表于 02-20 10:43 688次阅读

    开源随机数生成器库OpenRNG助力实现移植到Arm平台时的最佳性能

    OpenRNG 实现了多种生成器和分布方式。生成器算法可生成“看似随机”并具有某些统计特性的序列,我们将在下文进行讨论。分布方式会将序列映射
    的头像 发表于 02-08 09:24 1837次阅读
    开源随机数<b class='flag-5'>生成</b>器库OpenRNG助力实现移植到Arm平台时的最佳性能

    使用Python实现xgboost教程

    使用Python实现XGBoost模型通常涉及以下几个步骤:数据准备、模型训练、模型评估和模型预测。以下是一个详细的教程,指导你如何在Python中使用XGBoost。 1. 安装XGBoost
    的头像 发表于 01-19 11:21 2254次阅读