python【5】如何快速找到多个字典中的公共键
2018-01-15 15:10
330 查看
案例 :在赛事统计中,经常需要知道每一轮中都有得分的运动员。
比如第一场中,使用字典来统计队员和得分情况 d1={'a':3.'b':4,'c':3,'d':2},仅仅记录有得分的运动员,得分为0 不记录。
第二场 d2={'a':3.'b':4,'c':3,'d':2.'e':1}
第三场 d3={'b':4,'c':3,'d':2}
比如在这三场比赛中,统计每场都有进球的球员 ,在数据量不大的情况下,很容易肉眼分出来,但是当数量量大,多名球员时,使用循环的方法。从d1 中选取键,与其他的字典的键进行比较,有相同的值就放到新的列表---记录每轮都有得分的列表。
首先生成一个表示球员得分的随机字典
{'a':3.'b':4,'c':3,'d':2.'e':1} 使用random函数 {k:randint(1.7) for k in 'abcdefg'} 如果这样写生成的随机字典
,那么每一个字典中代表球员姓名的键值abcdefg 都会出现 ,此时使用sample函数,在给出的值中随机取样,这样就不会全部取出来
random.sample
random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列
from random import randint,sample
{k:randint(1,6) for k in sample('abcdefghijk',randint(3,8)} #在序列‘abcdefghijk’中随机取样3-8个
代码如下,使用迭代。
现在是使用循环迭代的方法,针对的是字典个数不多,但是当字典个数很多 及时几百的时候 也要挨个判断,这就不是很现实,输入也复杂,现在便引入几个方便的函数 使用集合的交集来操作。
使用字典的keys()得到一个字典的keys的集合;
使用map函数,得到所有字典的keys的集合;
使用reduce函数,取得所有字典的keys的集合的交集。
dict.keys()是获取字典的键值作为一个集合
在3.5版本中 这方法并不正确 ,无法得到字典的键的集合
3.5版本使用viewkeys方法是不可以的 ,只可以使用keys 可以得到,不过在2.7版本中,viewkeys和keys 方法均可得到字典的键的集合。推荐使用dict.keys()方法。
map()、filter()、reduce()这三个都是应用于序列的内置函数。
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
利用map函数是得到所有字典的键的集合。
语法为 :map(function,iterable) 即map(dict.keys(),[d1,d2,d3,d4,d5,d6....dn]),-----就是在序列d1到dn中取出字典的键,放到新的序列中。
reduce()
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。如
在这里例子中 使用reduce函数 #这里需要注意一个地方,使用的是3.5版本,reduce函数需要通过导入functools这个类来使用(from functools import reduce),直接使用reduce是不可以的 会报错:name 'reduce' is not defined
对取到的所有字典的键去交集。
reduce(lambda a,b:参数的运算方法,[所操作的序列])
reduce(lambda a,b:a&b,map[dict.keys,[d1,d2,d3]])
代码如下 :
和使用迭代的方法是一样的 ,使用reduce和map的方法 适用于字典个数很多的情况。
比如第一场中,使用字典来统计队员和得分情况 d1={'a':3.'b':4,'c':3,'d':2},仅仅记录有得分的运动员,得分为0 不记录。
第二场 d2={'a':3.'b':4,'c':3,'d':2.'e':1}
第三场 d3={'b':4,'c':3,'d':2}
比如在这三场比赛中,统计每场都有进球的球员 ,在数据量不大的情况下,很容易肉眼分出来,但是当数量量大,多名球员时,使用循环的方法。从d1 中选取键,与其他的字典的键进行比较,有相同的值就放到新的列表---记录每轮都有得分的列表。
首先生成一个表示球员得分的随机字典
{'a':3.'b':4,'c':3,'d':2.'e':1} 使用random函数 {k:randint(1.7) for k in 'abcdefg'} 如果这样写生成的随机字典
,那么每一个字典中代表球员姓名的键值abcdefg 都会出现 ,此时使用sample函数,在给出的值中随机取样,这样就不会全部取出来
random.sample
random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列
from random import randint,sample
{k:randint(1,6) for k in sample('abcdefghijk',randint(3,8)} #在序列‘abcdefghijk’中随机取样3-8个
代码如下,使用迭代。
现在是使用循环迭代的方法,针对的是字典个数不多,但是当字典个数很多 及时几百的时候 也要挨个判断,这就不是很现实,输入也复杂,现在便引入几个方便的函数 使用集合的交集来操作。
使用字典的keys()得到一个字典的keys的集合;
使用map函数,得到所有字典的keys的集合;
使用reduce函数,取得所有字典的keys的集合的交集。
dict.keys()是获取字典的键值作为一个集合
在3.5版本中 这方法并不正确 ,无法得到字典的键的集合
3.5版本使用viewkeys方法是不可以的 ,只可以使用keys 可以得到,不过在2.7版本中,viewkeys和keys 方法均可得到字典的键的集合。推荐使用dict.keys()方法。
map()、filter()、reduce()这三个都是应用于序列的内置函数。
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
利用map函数是得到所有字典的键的集合。
语法为 :map(function,iterable) 即map(dict.keys(),[d1,d2,d3,d4,d5,d6....dn]),-----就是在序列d1到dn中取出字典的键,放到新的序列中。
reduce()
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。如
在这里例子中 使用reduce函数 #这里需要注意一个地方,使用的是3.5版本,reduce函数需要通过导入functools这个类来使用(from functools import reduce),直接使用reduce是不可以的 会报错:name 'reduce' is not defined
对取到的所有字典的键去交集。
reduce(lambda a,b:参数的运算方法,[所操作的序列])
reduce(lambda a,b:a&b,map[dict.keys,[d1,d2,d3]])
代码如下 :
和使用迭代的方法是一样的 ,使用reduce和map的方法 适用于字典个数很多的情况。
相关文章推荐
- python-3-如何快速找到多个字典中的公共键(key)?
- python高效编程技巧5(如何快速找到多个字典中的公共键)
- <27>python学习笔记——如何快速找到多个字典中的的公共键key
- python 2-5 如何快速找到多个字典中的(key) viewkeys(集合)/reduce(lambda a,b:a&b,map(d.keys(),[d1,d2])
- python快速找到多个字典中的公共键
- 如何快速找到多个字典中的公共键(key)
- 如何快速找到多个字典中出现的公共键
- 如何快速找到多个字典中的公共键
- 如何快速找到多个字典中出现的公共键
- 【慕课网】如何快速找到多个字典中的公共键
- 2-5快速找到多个字典中的公共键
- [Python高效编程] - 快速找到多个字典的公共键
- python_如何快速找打字典中公共key
- Python高级编程-如何快速找到多个字典中的公工键(key)
- Python3.6中多个字典中找到公共key
- Python利用公共键如何对字典列表进行排序详解
- 人生苦短我用python python如何快速入门?
- 如何快速查询python中常用包和使用办法
- 如何快速的找到自己需要的资料
- 用python3+PyQt5改写Python Qt GUI快速编程的第6章实例主窗口 信号及槽如何使用