【Python—字典的用法】找到多个字典的公共键
有 a,b,c,d,e,f 6名球员,他们在三轮比赛中的进球数用 s1,s2,s3 3个字典表示,找到每轮都有进球的球员?
创建 s1,s2,s3 3个字典素材
from random import randint,sample s = 'abcdef'
s1 = {x: randint(3,4) for x in sample(s,randint(4,6))}
s2 = {x: randint(3,4) for x in sample(s,randint(4,6))}
s3 = {x: randint(3,4) for x in sample(s,randint(4,6))}
print(s1)
print(s2)
print(s3)
输出:
{'d': 4, 'a': 3, 'e': 3, 'f': 4}
{'c': 4, 'b': 3, 'e': 3, 'f': 4}
{'e': 3, 'c': 4, 'd': 3, 'a': 3}
结果随机产生
知识点:
- random.randint(a,b)随机生一个整数int类型,可以指定这个整数的范围。
- random.sample(sequence, k),从指定序列sequence中随机获取k个指定长度的片断。sample函数不会修改原有序列。
方法一:通过遍历加if条件
common_key = [i for i in s1 if i in s2 and i in s3]
print(common_key)
输出:
['e']
知识点:
列表生成式,上面一行语句等同于下面循环生成上面的list
common_key = []
for i in s1:
if i in s2 and i in s3:
coommon_key.append(i)
print(common_key)
输出:
['e']
方法二:用集合set的交集、并集
common_key = s1.keys()&s2.keys()&s3.keys()
print(common_key)
输出:
{'e'}
知识点:
字典中 .keys(), .values() and .items() 3个方法,其中.keys(), .items() 返回的是一个set-like 对象,所以set具备的集合计算也可以用
help(dict.keys)
help(dict.values)
help(dict.items) print(s1.keys()) #返回一个字典所有的键
print(s1.keys()|s2.keys()|s3.keys()) # 并集
print(s1.keys()&s2.keys()&s3.keys()) # 交集 print(s1.items()) #返回一个字典所有的键值对,键值对的交集要求键和值都一样
print(s1.items()&s2.items()&s3.items()) #交集
输出:
Help on method_descriptor:
keys(...)
D.keys() -> a set-like object providing a view on D's keys Help on method_descriptor:
values(...)
D.values() -> an object providing a view on D's values
Help on method_descriptor:
items(...)
D.items() -> a set-like object providing a view on D's items
dict_keys(['d', 'a', 'e', 'f'])
{'e', 'd', 'a', 'f', 'c', 'b'}
{'e'}
dict_items([('d', 4), ('a', 3), ('e', 3), ('f', 4)])
{('e', 3)}
方法三:用 map() 函数 reduce() 函数, 适用于n个字典
#第一步用 map 函数返回所有字典所有的键 s = [s1,s2,s3]
r = map(lambda x:x.keys(),s)
r1 = map(dict.keys,s) # r 和 r1 是同等效果,所以dict.keys是函数?
print(list(r1))
#第二步用 reduce 函数算出前一项与后一项的交集 from functools import reduce
print(reduce(lambda a,b:a&b,r))
输出:
[dict_keys(['d', 'a', 'e', 'f']), dict_keys(['c', 'b', 'e', 'f']), dict_keys(['e', 'c', 'd', 'a'])]
{'e'}
知识点:
map 函数接收两个参数,一个是函数,一个是 Iterable,map 将传入的函数依次作用到序列的每个元素,并把结果作为新的 Iterator 返回。由于结果r是一个 Iterator,Iterator 是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。
reduce 把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce 把结果继续和序列的下一个元素做累积计算
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
注意:
map 返回的是 Iterator 惰性序列!
print(reduce(lambda a,b:a&b,r1))
输出:
TypeError: reduce() of empty sequence with no initial value
报错的原因:
print(list(r1)) #因为前面print把r1这个 Iterator 序列全部打出来,r1里面就是空的序列,所以这上面填r1就会报错
输出:
[]
遗留疑问:
map()函数第一个参数接收函数,所以 dict.keys() 是函数?这个不是方法吗?
map(dict.keys,s)
【Python—字典的用法】找到多个字典的公共键的更多相关文章
- python数据结构-如何快速找到多个字典中的公共键
如何快速找到多个字典中的公共键 问题举例 统计每轮都进球的球员: 第1轮{‘tom’:1, 'meixi':2} 第2轮{‘coco’:3, 'meixi':4, 'marton':2} 第3轮{'c ...
- python集合与字典的用法
python集合与字典的用法 集合: 1.增加 add 2.删除 •del 删除集合 •discard(常用)删除集合中的元素 #删除一个不存在的元素不会报错 •remove 删除一个不存在的 ...
- Python dictionary 字典 常用法
Python dictionary 字典 常用法 d = {} d.has_key(key_in) # if has the key of key_in d.keys() ...
- python中字典的用法
一,字典的简单介绍概念: 字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是 唯一的. 在保存的时候, 根据key来计算出一个内存地址. 然后将 ...
- Python中的dict字典的用法
Python中的字典特点: 速度快,内部使用二分查找的方式 可以用来存储大量的关系型数据 字典是无序的 字典的定义方式: dic = dict(name =”zhangsan”, age = 19) ...
- python里字典的用法介绍
一.什么是字典 字典是python里的一种数据类型,特点是元素的无序性,和键key的唯一性.字典的创建方法是{key:values},字典里的键key只能是不可变的数据类型(整型,字符串或者是元组), ...
- Python基础5:列表 元祖 字典 集合
[ 列表] 列表(list)是Python以及其他语言中最常用到的数据结构之一.Python使用使用中括号 [ ] 来解析列表. 列表是可变的(mutable)——即:可以改变列表的内容. 相关操作: ...
- Python 字符、整型、列表字典等操作(二)
在上次课程中简要的讲述了Python的基础常识,现在来详细的学习一下吧! 一.类和对象 面向过程和面向对象 面向过程:C 面向对象:Java.Python等 类和对象的含义: 类,是对事物的抽象,比如 ...
- Python基础5:列表 元祖 字典 集合 Json
[ 列表] 列表(list)是Python以及其他语言中最常用到的数据结构之一.Python使用使用中括号 [ ] 来解析列表. 列表是可变的(mutable)——即:可以改变列表的内容. 相关操作: ...
随机推荐
- JVM(2)之 JAVA堆
开发十年,就只剩下这套架构体系了! >>> 之前我们说到了栈,它在内存中是连续的空间:保存一个个的栈帧,对应一次次方法的调用:还讲到了他是保存对象的引用,那么对象存在哪里呢?我们 ...
- JVM分为哪些区,每一个区干嘛的?
程序计数器PC 线程私有的 它可以看做是当前线程所执行的字节码的行号指示器 内存区域中唯一一个没有规定任何OutOfMemoryError的区域 Java虚拟机栈 线程私有的 每个方法在执行的同时都会 ...
- Sass函数-数字函数-floor()函数
floor() 函数刚好与 ceil() 函数功能相反,其主要将一个数去除其小数部分,并且不做任何的进位.也就是只做舍,不做入的计算: >> floor(2.1) 2 >> f ...
- ElasticSearch1.7 java api
package cn.xdf.wlyy.solr.utils; import java.util.ArrayList;import java.util.HashMap;import java.util ...
- Es学习第九课, 聚合查询和复合查询
ES除了实现前几课的基本查询,也可以实现类似关系型数据库的聚合查询,如平均值sum.最小值min.最大值max等等 我们就用上一课的数据作为参考来举例 聚合查询 sum聚合 sum是一个求累加值的聚合 ...
- springboot+jsp+mybatis项目实例(后台成功,但是无法跳转jsp页面,没有实体类的注解,看springboot+jsp第二弹相关配置,即可成功配置jsp)
SpringBoot是用来简化SpringMvc开发的项目,这里自然要整合mybatis等持久化框架! 先看看项目目录: 一.在pom.xml中配置依赖jar包:<project xmlns=& ...
- linux学习-用户组与权限管理
一.用户与组 1.用户 管理员:root,UID为0 普通用户:1-60000 自动分配 系统用户:1-499,1-999(Centos7),对守护进程分配获取资源进行权限分配 登录用户:500+,1 ...
- Java Web学习总结(10)学习总结-EL表达式
一,EL 表达式概述(EL主要从域中取数据) EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写. 二,EL从域中 ...
- manjaro linux java环境配置
大佬博客 yaourt jdk 不管怎么装就是会出错 #报错信息 Error: dl failure on line 597 Error: failed /usr/lib/jvm/java-12-op ...
- [CSP-S模拟测试]:序列(主席树)
题目描述 小$A$把自己之前得到的序列展示给了小$B$,不过这一次,他并不要求小$B$模仿他之前的行为.他给了小$B$一些询问,每个询问都是$l\ r\ x$的形式,要求小$B$数出在序列的第$l$个 ...