Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
作者:垄上行 发布时间:2023-07-14 14:37:00
标签:Python,数据结构与算法,字典
本文实例讲述了Python在字典中将键映射到多个值上的方法。分享给大家供大家参考,具体如下:
问题:一个能将键(key)映射到多个值的字典(即所谓的一键多值字典[multidict])
解决方案:如果想让键映射到多值,需要将这多个值保持到另一个容器如列表或集合中;
>>> d={'a':[1,2,3],'b':[4,5]}
>>> d
{'b': [4, 5], 'a': [1, 2, 3]}
>>> e={'a':{1,2,3,3},'b':{4,5}}
>>> e
{'b': {4, 5}, 'a': {1, 2, 3}}
>>> f={'a':[1,2,3,3],'b':[4,5]}
>>> f
{'b': [4, 5], 'a': [1, 2, 3, 3]}
>>>
更方便的创建这样的字典是利用collections模块中的defaultdict类。defaultdict的一个特点是它会自动给字典初始化第一个值,这样只需添加元素即可。例如:
from collections import defaultdict
d=defaultdict(list) #创建一键多值的字典,key的value是list类型
d['a'].append(1)
d['a'].append(2)
d['a'].append(2)
d['b'].append(4)
c=defaultdict(set) #创建一键多值的字典,key的value是set类型
c['a'].add(1)
c['a'].add(2)
c['a'].add(2)
c['b'].add(4)
print('key的value是list类型的字典:',d)
print('key的value是set类型的字典:',c)
>>> ================================ RESTART ================================
>>>
key的value是list类型的字典: defaultdict(<class 'list'>, {'b': [4], 'a': [1, 2, 2]})
key的value是set类型的字典: defaultdict(<class 'set'>, {'b': {4}, 'a': {1, 2}})
>>>
关于defaultdict需要注意的一点,他会自动创建字典表项以待稍后的访问(即使这些表项当前在字典中还没有找到)。
如果想取消这个功能,可以在普通的字典上调用setdefault()
方法来取代,例如:
d={} #一个普通的字典
d.setdefault('a',[]).append(1)
d.setdefault('a',[]).append(2)
d.setdefault('a',[]).append(2)
d.setdefault('b',[]).append(4)
>>>
key的value是list类型的字典:
{'a': [1, 2, 2], 'b': [4]}
补充:
构建一个一键多值的字典很容易,但是如果试着自己对第一个值做初始化操作,这个会变得很杂乱,如果使用defaultdic后代码会简洁很多:
pairs={'a':[22,44],'b':[88]}
d=defaultdict(list)
for key,value in pairs.items():
d[key].append(value)
print (d)
>>>
defaultdict(<class 'list'>, {'a': [[22, 44]], 'b': [[88]]})
>>>
(代码摘自《Python Cookbook》)
希望本文所述对大家Python程序设计有所帮助。
来源:http://www.cnblogs.com/apple2016/p/5744799.html


猜你喜欢
- 为了吸引更多的用户,设计好一个分享海报还是很有必要的。而小程序要生成一个海报还是有点坑的,下面分享下我们打卡小程序的一些经验。分享海报的效果
- 目录OpenCV先决条件我们会在本文中涵盖7个主题读,写和显示图像imread():imshow():imwrite():读取视频并与网络摄
- 今天登录社区的时候看到有之前的文章有个留言的评论,说如何统计typecho所有文章的字数,这里分享一下代码。在当前主题的functions.
- 对于需要大量翻译的数据,人工翻译太慢,此时需要使用软件进行批量翻译。1.使用360的翻译def fanyi_word_cn(string):
- 我就废话不多说了,大家还是直接看代码吧~import tensorflow as tfn1 = tf.constant(2)n2 = tf.
- 存在的问题: 合并、压缩文件主要有2方面的问题: 1. 每次发布的时候需要运行一下自己写的bat文件或者其他程序把文件按照自己的配置合并和压
- 用python写了一个简单版本的textrank,实现提取关键词的功能。import numpy as np import jieba im
- 之前用Class类来搭建神经网络class Neuro_net(torch.nn.Module): ""&q
- 前言我们平时的工作中可能需要和服务端建立链接,从而来接受服务端推送的数据,常用的就是eventSource,我们平时常用的就是通过get的方
- 说明相应的学习视频见链接,本文只对重点进行总结。多进程重点(只要看下面代码的main函数即可)1.创建2.如何开守护进程3.多进程,开销大,
- python标准库包含于日期(date)和时间(time)数据的数据类型,datetime、time以及calendar模块会被经常用到。d
- 背景在python工程完成开发以后需要编译成可执行文件,如此一来生产环境和开发环境隔离开来便于用户使用(可独立使用,无需配置python开发
- itertools — 为高效循环而创建迭代器的函数accumulate(iterable: Iterable, fun
- 本文为大家分享了mysql 5.7.18 Archive压缩版安装的具体方法,供大家参考,具体内容如下文章参考:5.7.17 winx64安
- 前言提示:以下是本篇文章正文内容🍒PIL库概述PIL库支持图像存储、 显示和处理, 它能够处理几乎所有图片格式, 可以完成对图像的缩放、 剪
- 一、安装1.从官网下载Linux版的Pycharm官网链接:https://www.jetbrains.com/pycharm/downlo
- 字典的添加与修改# coding:utf-8if __name__ == '__main__':
- K-means(K均值)算法是最简单的一种聚类算法,它期望最小化平方误差注:为避免运行时间过长,通常设置一个最大运行轮数或最小调整幅度阈值,
- ubuntu 系统自带的 python 有多个版本,使用时难免会遇到环境变量出错,特别是当自动化运行脚本的时候。特别是近一个月来,实验室的小
- 前言大家应该都有所体会,为了提高验证码的识别准确率,我们当然要首先得到足够多的测试数据。验证码下载下来容易,但是需要人脑手工识别着实让人受不