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

    文章

    4308

    浏览量

    62434
  • python
    +关注

    关注

    56

    文章

    4782

    浏览量

    84466
收藏 人收藏

    评论

    相关推荐

    RNN在图片描述生成中的应用

    输入图像的内容。 RNN的基本原理 RNN是一种用于处理序列数据的神经网络,它通过循环结构来处理序列中的每个元素,并保持前一个元素的信息。RNN的主要特点是它能够处理任意长度的序列,并
    的头像 发表于 11-15 09:58 203次阅读

    如何使用RNN进行时间序列预测

    一种强大的替代方案,能够学习数据中的复杂模式,并进行准确的预测。 RNN的基本原理 RNN是一种具有循环结构的神经网络,它能够处理序列数据。在RNN中,每个输入序列的元素都会通过一个或多个循环层,这些循环层可以捕获时间
    的头像 发表于 11-15 09:45 176次阅读

    如何使用Python构建LSTM神经网络模型

    numpy tensorflow 2. 准备数据 LSTM模型通常用于序列数据,比如时间序列预测或文本生成。这里我们以一个简单的时间序列预测为例。假
    的头像 发表于 11-13 10:10 167次阅读

    【「时间序列与机器学习」阅读体验】时间序列的信息提取

    模型效果与性能的过程。 时间序列的缺失值填充方法有:插值法;回归填充;均值/中位数/众数填充;可以借助 Python 的 Pandas库,通过前向填充、后向填充、线性插值、均值/中位数/众数填充等
    发表于 08-17 21:12

    【《时间序列与机器学习》阅读体验】+ 时间序列的信息提取

    之前对《时间序列与机器学习》一书进行了整体浏览,并且非常轻松愉快的完成了第一章的学习,今天开始学习第二章“时间序列的信息提取”。 先粗略的翻阅第二章,内容复杂,充斥了大量的定义、推导计算、代码,好在
    发表于 08-14 18:00

    【「时间序列与机器学习」阅读体验】全书概览与时间序列概述

    他领域(如自然语言处理、计算机视觉等)的关联。 ●第2章“时间序列的信息提取”:介绍特征工程的核心概念及其在时间序列分析中的广用,比如对原始数据进行归一化、缺失值填充等转换;以及如何通过特征工程从时间
    发表于 08-07 23:03

    python训练出的模型怎么调用

    Python中,训练出的模型可以通过多种方式进行调用。 1. 模型保存与加载 在Python中,训练好的模型需要被保存,以便在其他程序或会话中使用。以下是一些常用的模型保存和加载方法。 1.1
    的头像 发表于 07-11 10:15 1634次阅读

    数字序列信号发生器如何测量

    数字序列信号发生器(Digital Sequence Signal Generator,简称DSSG)是一种用于生成数字序列信号的设备。它广泛应用于通信、雷达、电子对抗等领域。本文将详细介绍数字
    的头像 发表于 06-03 14:04 371次阅读

    如何使用Python生成四位随机数字

    为了实现这些目标,Python 为我们提供了random() 模块。random() 是一个内置的 Python 模块,用于生成随机数。
    的头像 发表于 04-15 12:47 610次阅读

    基于Python的地图绘制教程

    本文将介绍通过Python绘制地形图的方法,所需第三方Python相关模块包括 rasterio、geopandas、cartopy 等,可通过 pip 等方式安装。
    的头像 发表于 02-26 09:53 1123次阅读
    基于<b class='flag-5'>Python</b>的地图绘制教程

    TSMaster 序列发送模块在汽车开发测试中的应用

    众所周知,序列发送模块可以不需要脚本代码实现测试中特定控制报文序列的发送,该模块多用于循环顺序控制的测试案例中。序列发送模块的常用场景,主要是针对一些新开发的产品需要通过该模块来验证产
    的头像 发表于 02-19 14:00 635次阅读
    TSMaster <b class='flag-5'>序列</b>发送模块在汽车开发测试中的应用

    通过Python脚本实现WIFI密码的自动猜解

    本文将记录学习下如何通过 Python 脚本实现 WIFI 密码的自动猜解。
    的头像 发表于 01-25 10:46 3325次阅读
    <b class='flag-5'>通过</b><b class='flag-5'>Python</b>脚本实现WIFI密码的自动猜解

    python自带的idle怎么进入

    Python自带的IDLE是一个集成开发环境(Integrated Development Environment),它通过提供编辑器和交互式解释器,使得Python的开发变得更加简单和便捷。本文将
    的头像 发表于 11-29 14:51 2195次阅读

    python shell怎么用

    Python Shell是一种交互式解释器,可以通过命令行直接运行Python代码。在Shell中,可以输入一行代码并立即得到结果,非常适合于测试、尝试新代码或进行简单的任务。本文将详细介绍
    的头像 发表于 11-29 14:36 1108次阅读

    python语言特点有哪些

    、详实和细致的描述,共计超过1500字。 简洁优雅: Python以简洁和优雅的语法而著称。相对于其他编程语言,Python代码通常看起来更加清晰易读。这得益于Python采用了面向对象的方法,
    的头像 发表于 11-29 14:29 1056次阅读