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

    文章

    4422

    浏览量

    67847
  • python
    +关注

    关注

    58

    文章

    4885

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用Python/MyHDL创建自定义FPGA IP

    使用 Python/MyHDL 创建自定义 FPGA IP,与 Vivado 集成,并通过 PYNQ 进行控制——实现软件上的简单硬件设计。
    的头像 发表于 04-09 09:53 219次阅读
    使用<b class='flag-5'>Python</b>/MyHDL创建自定义FPGA IP

    [VirtualLab] 使用Python进行跨平台参数扫描

    如何收集结果,这些结果可以通过Python提供的所有功能进一步处理。以光栅为例,严格分析了光栅的衍射效率。 **此用例展示了… ** 在哪里找文件 README文件 **准备Python
    发表于 03-31 09:36

    如何在 VisionFive 上使用 Python 包?

    Fedora 并确保 VisionFive 已连接到互联网。有关详细说明,请参阅通过以太网使用 SSH或使用 USB 转串行转换器部分中的VisionFive 单板计算机快速入门指南. 执行pip命令
    发表于 03-30 08:28

    [CANopen] 使用 CANopenEditor 工具编辑 CANopen 对象字典

    /前言CANopen是一种基于CAN总线的高层通信协议,其核心对象字典(ObjectDictionary)定义了设备的全部参数与功能。为满足不同厂商设备在特定场景
    的头像 发表于 03-20 08:33 1491次阅读
    [CANopen] 使用 CANopenEditor 工具编辑 CANopen 对象<b class='flag-5'>字典</b>

    东风太极大模型通过国家生成式人工智能服务备案

    日前,从国家互联网信息办公室网站获悉,东风汽车自主研发的“东风太极大模型”体系正式通过国家互联网信息办公室生成式人工智能服务备案。
    的头像 发表于 03-18 15:59 253次阅读

    JSON:简洁代码高效搞定序列化与反序列

    面对频繁的数据交互需求,用最简方式实现JSON序列化与反序列化已成为开发者必备技能,借助主流库,轻松实现零负担数据转换。JSON(JavaScriptObjectNotation)是一种轻量级
    的头像 发表于 02-25 19:04 242次阅读
    JSON:简洁代码高效搞定<b class='flag-5'>序列</b>化与反<b class='flag-5'>序列</b>化

    极简代码,搞定JSON序列化与反序列

    快速实现JSON数据的生成序列化)与解析(反序列化)。 目前json库已全面支持LuatOS开发系列产品,开发者可根据项目实际需求,灵活选用并进行快速集成与开发。 一、 JSON基础要点 在
    的头像 发表于 02-23 21:46 441次阅读
    极简代码,搞定JSON<b class='flag-5'>序列</b>化与反<b class='flag-5'>序列</b>化

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

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

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

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

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

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

    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 1303次阅读
    NVIDIA recsys-examples在<b class='flag-5'>生成</b>式推荐系统中的高效实践

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

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