Python
cookbook(数据结构与算法)在字典中将键映射到多个值上的方法

本文实例讲述了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(, {'b': [4], 'a': [1, 2,
2]})

key的value是set类型的字典: defaultdict(, {'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(, {'a': [[22, 44]], 'b': [[88]]})

>>>

Pythoncookbook(数据结构与算法)在字典中将键映射到多个值上的方法的更多相关文章

  1. 【python cookbook】【数据结构与算法】6.在字典中将键映射到多个值上

    问题:一个能将键(key)映射到多个值的字典(即所谓的一键多值字典[multidict]) 解决方案:如果想让键映射到多值,需要将这多个值保持到另一个容器如列表或集合中: >>> d ...

  2. 『Python CoolBook』数据结构和算法_字典比较&字典和集合

    一.字典元素排序 dict.keys(),dict.values(),dict.items() 结合max.min.sorted.zip进行排序是个很好的办法,另外注意不使用zip时,字典的lambd ...

  3. 【python cookbook】【数据结构与算法】18.将名称映射到序列的元素中

    问题:希望通过名称来访问元素,减少结构中对位置的依赖性 解决方案:使用命名元组collections.namedtuple().它是一个工厂方法,返回的是python中标准元组类型的子类,提供给它一个 ...

  4. python3数据结构与算法

    python内置的数据结构包括:列表(list).集合(set).字典(dictionary),一般情况下我们可以直接使用这些数据结构,但通常我们还需要考虑比如搜索.排序.排列以及赛选等一些常见的问题 ...

  5. cookbook_数据结构和算法

    1.1将数据分解为单独的变量 list_a = [1,2,3,4,5,6,7,8,9] a,b,c,d,e,f,g,h,i = list_a print(a,b,c,d,e,f,g,h,i) #使用相 ...

  6. 【算法】字典的诞生:有序数组 PK 无序链表

    参考资料 <算法(java)>                           — — Robert Sedgewick, Kevin Wayne <数据结构>       ...

  7. Python 数据结构和算法

    阅读目录 什么是算法 算法效率衡量 算法分析 常见时间复杂度 Python内置类型性能分析 数据结构 顺序表 链表 栈 队列 双端队列 排序与搜索 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归 ...

  8. 数据结构与算法(Python)

    数据结构与算法(Python) Why? 我们举一个可能不太恰当的例子: 如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰 ...

  9. 为什么我要放弃javaScript数据结构与算法(第七章)—— 字典和散列表

    本章学习使用字典和散列表来存储唯一值(不重复的值)的数据结构. 集合.字典和散列表可以存储不重复的值.在集合中,我们感兴趣的是每个值本身,并把它作为主要元素.而字典和散列表中都是用 [键,值]的形式来 ...

随机推荐

  1. js去掉url后某参数【函数封装】

    function delParam(paramKey) { var url = window.location.href; //页面url var urlParam = window.location ...

  2. rank 和 ROW_NUMBER 区别

    SELECT * , RANK() OVER ( PARTITION BY APP_NAME ORDER BY SETTING_NAME,SETTING_CODE ASC ) AS Rank FROM ...

  3. less 分页显示文件内容

    1.命令功能 less 是more的增强版,可以分页显示文件内容,而且less打开文件的速度要比vi,more更快.less支持搜索功能,显示行号. 2.语法格式 less  option  file ...

  4. QOpenGLWidget

    QOpenGLWidget描述 QOpenGLWidget类是用于渲染OpenGL图形. 除了可以选择使用QPainter和标准的OpenGL渲染图形,QOpenGLWidget类提供了在Qt应用程序 ...

  5. 【SDR】UHD安装教程

    USRP作为软件无线电系统中常用的射频设备,其驱动UHD的安装及稳定运行,是SDR系统稳定的必备条件,该篇博客总结UHD的相关安装方法,主要有三种,分别是apt-get.github clone源码编 ...

  6. Maven编译

    多模块 只有需要编译成jar的模块才设置build <build> <plugins> <plugin> <groupId>org.springfram ...

  7. White-Label Apps

    转载:https://www.vendasta.com/blog/white-label-apps What are white-label apps? White-label apps are ap ...

  8. 快速取出选中checkbox的值

    原料:jquery 直接上代码 html代码 <html> <head> <title>$Title$</title> </head> &l ...

  9. 一例swoole_process运行swoole_http_server

    swoole_process swoole_process('执行的文件路径','文件所需的参数');//利用swoole-process执行一个外部脚本 swoole_process__constr ...

  10. select * from a,b探讨

    select * from a,b探讨 今天看同事代码里使用了select * from a,b where a.id=b.id,而我平时都是使用select * from a inner join ...