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

    文章

    3990

    浏览量

    61378
  • python
    +关注

    关注

    52

    文章

    4686

    浏览量

    83507
收藏 人收藏

    评论

    相关推荐

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

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

    python怎么设置循环次数

    可以生成一个整数序列通过指定范围和步长来控制生成序列。 for i in range ( 10 ): # 执行10次循环 print (
    的头像 发表于 11-23 15:50 2080次阅读

    python里item的用法

    item是Python中一个非常重要的概念,它可以用于多种数据结构和算法的实现。在Python中,item通常用于表示一个集合或序列中的一个元素。本文将详细介绍item的用法,并探讨它在列表、
    的头像 发表于 11-21 15:09 1707次阅读

    Python减少字典对象内存大小的方法

    Python里用字典来表示结构信息是非常方便的: >>> ob ={ 'x' : 1 , 'y' : 2 , 'z' : 3 } >>> x = ob [ 'x' ] >>> ob
    的头像 发表于 11-03 15:21 357次阅读

    时间序列分析的四个基本Python库介绍

    在本文中,我们将介绍四个主要的Python库——statmodels、tslearn、tssearch、 tsfresh ——每个库都针对时间序列分析的不同方面进行了定制。这些库为从预测到模式识别
    的头像 发表于 11-03 10:17 359次阅读
    时间<b class='flag-5'>序列</b>分析的四个基本<b class='flag-5'>Python</b>库介绍

    Python 字典组成的数组怎么进行去重

    你知道吗?如果数组是字典组成的,直接对数组内的字典采用set的方式进行去重,会报错: test
    的头像 发表于 11-01 10:55 240次阅读

    Python 支持同步的推导式版本

    PEP-492 和 PEP-525 通过 async/await 语法,引入了对原生协程和异步生成器的支持。本 pep 提议给列表、集合、字典解析式和生成器表达式添加异步的版本。 基本
    的头像 发表于 10-31 14:37 141次阅读

    关于替换原生字典munch的使用全解

    字典Python 中基础的数据结构之一,字典的使用,可以说是非常的简单粗暴,但即便是这样一个与世无争的数据结构,仍然有很多人 "看不惯它" 。 也许你并不觉得,但我相信,你看了这篇文章后,一定
    的头像 发表于 10-31 14:12 214次阅读

    Addit:写起来令人极其舒适的字典模块

    Addit 是一个Python模块,除了提供标准的字典语法外,Addit 生成字典的值既可以使用属性来获取,也可以使用属性进行设置。 这意味着你 不用 再写这样的
    的头像 发表于 10-31 11:42 203次阅读

    Addit:一个写起来令人极其舒适的字典模块

    Addit 是一个Python模块,除了提供标准的字典语法外,Addit 生成字典的值既可以使用属性来获取,也可以使用属性进行设置。 这意味着你 不用 再写这样的
    的头像 发表于 10-30 09:56 244次阅读

    Addict:一个写起来令人极其舒适的字典模块

    Addit 是一个Python模块,除了提供标准的字典语法外,Addit 生成字典的值既可以使用属性来获取,也可以使用属性进行设置。 这意味着你 不用 再写这样的
    的头像 发表于 10-21 14:24 271次阅读

    Python字典组成的数组怎么进行去重

    你知道吗?如果数组是字典组成的,直接对数组内的字典采用set的方式进行去重,会报错: test
    的头像 发表于 10-17 11:26 286次阅读

    如何使用Serde进行序列化和反序列

    = { version = "1.0" , features = [ "derive" ] } 其中 features = ["derive"] 表示使用 Serde 的派生宏,可以自动生成序列化和反序列化代码。
    的头像 发表于 09-30 17:09 881次阅读

    如何用Python生成自定义二维码

    MyQR是Python的一个库,它可以用来方便地生成艺术、自定义和极简QR码。MyQR可以生成黑白、彩色、GIF动图等多种样式的QR码。 安装MyQr pip install MyQr 1.
    的头像 发表于 09-12 17:11 609次阅读
    如何用<b class='flag-5'>Python</b><b class='flag-5'>生成</b>自定义二维码

    Python中的生成器是什么?它们的效率和可用性如何?

    Python 是一种以灵活性和多功能性着称的语言,它提供了一种称为生成器的强大功能。
    发表于 07-19 14:33 341次阅读