網(wǎng)站首頁 編程語言 正文
1、如何快速找到多個字典中的公共鍵(key)
實際案例:
西班牙足球甲級聯(lián)賽,每輪球員進球統(tǒng)計:
- 第一輪:{'蘇亞雷斯': 1, '梅西': 2, '本澤馬': 1, 'C羅': 3, ...}
- 第二輪:{'蘇亞雷斯': 2, 'C羅': 1, '格里絲曼': 2, '貝爾': 1, ...}
- 第三輪:{'蘇亞雷斯': 1, '托雷斯': 2, '貝爾': 1, '內馬爾': 1, ...}
?統(tǒng)計出前N輪,每場比賽都有進球的球員。
注:公共鍵就是在每個字典中都出現(xiàn)的鍵。
解決方案:
利用集合(set)的交集操作
- Step1:使用字典的
keys()
方法,得到一個字典keys的集合; - Step2:使用
map
函數(shù),得到所有字典的keys的集合; - Step3:使用
reduce
函數(shù),取所有字典的keys集合的交集。
2、代碼演示
from random import randint, sample? # 隨機取樣進球球員信息 print(sample('abcdef', randint(3, 6))) # 字典解析產生每輪數(shù)據(jù) s1 = {x: randint(1, 4) for x in sample('abcdef', randint(3, 6))} s2 = {x: randint(1, 4) for x in sample('abcdef', randint(3, 6))} s3 = {x: randint(1, 4) for x in sample('abcdef', randint(3, 6))} print(s1, s2, s3) # 方法1: # 迭代第1輪中鍵,之后再去判斷這個key是否在s2和s3當中,如果在就表示這個鍵是公共鍵 res = [] for k in s1: ? ? if k in s2 and k in s3: ? ? ? ? res.append(k) print(res) ? # 方法2: # 獲取每一個字典中的所有key,python2為viewkeys() print(s1.keys(), s2.keys(), s3.keys()) # 取所有集合的&交集,就是公共鍵 print(s1.keys() & s2.keys() & s3.keys()) ? # 方法3: # 使用map得到每一輪的keys集合 print(list(map(dict.keys, [s1, s2, s3]))) ? from functools import reduce # 使用reduce函數(shù),取每一輪的keys集合的交集 print(reduce(lambda a, b: a & b, map(dict.keys, [s1, s2, s3])))
3、快速找到多個字典中的公共鍵(key)的方法(補充)
方法一:for in循環(huán)
from random import randint, sample a1 = {k: randint(1, 4) for k in 'abcdefg'} a2 = {k: randint(1, 4) for k in 'abc123456789'} a3 = {k: randint(1, 4) for k in 'abcinubububu'} a4 = {k: randint(1, 4) for k in 'abc89898989'} r = [] for x in a1: if x in a2 and x in a3 and x in a4: r.append(x) print(r) randint(1, 4) # 從1~4間隨機取一個數(shù)
方法二:利用集合的交集操作
from random import randint, sample a1 = {k: randint(1, 4) for k in 'abcdefg'} a2 = {k: randint(1, 4) for k in 'abcdefg'} a3 = {k: randint(1, 4) for k in 'abcdefg'} a4 = {k: randint(1, 4) for k in 'abcdefg'} a = a1.keys() & a2.keys() & a3.keys() & a4.keys() print(a)
a1.keys():得到a1字典的key,一set格式;
a1.keys() & a2.keys() & a3.keys() & a4.keys():取4個集合的公共元素;
a為一個集合(set)
方法三:使用map即reduce(用于求n個字典的公共key)
from random import randint, sample from functools import reduce a1 = {k: randint(1, 4) for k in 'abcdefg'} a2 = {k: randint(1, 4) for k in 'abcdefg'} a3 = {k: randint(1, 4) for k in 'abcdefg'} a4 = {k: randint(1, 4) for k in 'abcdefg'} b1 = map(dict.keys, [a1, a2, a3, a4]) b2 = reduce(lambda a ,b: a & b, b1) print(b2) b1 = map(dict.keys, [a1, a2, a3, a4]) #以集合形式取每個字典的keys;
原文鏈接:https://xiaokang.blog.csdn.net/article/details/124437132
相關推薦
- 2022-05-04 C#調用SQL?Server中有參數(shù)的存儲過程_C#教程
- 2022-04-23 論C++的lambda是函數(shù)還是對象_C 語言
- 2022-03-28 用python實現(xiàn)超強的加密軟件_python
- 2022-04-14 c語言的程序環(huán)境與預處理詳解_C 語言
- 2022-11-25 Go實現(xiàn)快速生成固定長度的隨機字符串_Golang
- 2022-07-18 linux系統(tǒng)安全和應用
- 2024-07-22 @Resource和 @Autowired注解的區(qū)別
- 2022-08-21 Golang切片刪除指定元素的三種方法對比_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支