網(wǎng)站首頁 編程語言 正文
前言
在學(xué)習(xí)過程中發(fā)現(xiàn)有時(shí)候交換字典的鍵和值,會(huì)使得我們最后的輸出結(jié)果更加直觀明了,整理出以下四種交換方式(data是原字典,new_data 是交換后的字典)
一、當(dāng)值唯一時(shí)
1. 使用zip進(jìn)行交換
data= {'A':1, 'B':2, 'C':3} new_data = dict(zip(data.values(), data.keys())) print(new_data) # 運(yùn)行結(jié)果 # {1: 'A', 2: 'B', 3: 'C'}
2. 使用for循環(huán)遍歷交換
data= {'A':1, 'B':2, 'C':3} new_data = {} for key, val in data.items(): new_data[val] = key print(new_data) # 運(yùn)行結(jié)果 # {1: 'A', 2: 'B', 3: 'C'}
3. 使用dict.items()交換
new_data = dict([val, key] for key, val in data.items()) print(new_data) # 運(yùn)行結(jié)果 # {1: 'A', 2: 'B', 3: 'C'}
上述三種方式的前提條件是值唯一。如果data = {'A': 1, 'B': 2, 'C': 3, 'D': 3}
,最后輸出結(jié)果是{1: 'A', 2: 'B', 3: 'D'}
,C會(huì)被D代替。
二、當(dāng)值不唯一時(shí)
如果值不唯一,可以使用下面這種方式,最后輸出結(jié)果是{1: ['A'], 2: ['B'], 3: ['C', 'D']}
from collections import defaultdict def main(): data = {'A': 1, 'B': 2, 'C': 3, 'D': 3} new_data = defaultdict(list) for key, val in data.items(): new_data[val].append(key) print(new_data) # 運(yùn)行結(jié)果 # {1: ['A'], 2: ['B'], 3: ['C', 'D']}
Python中通過Key訪問字典,當(dāng)Key不存在時(shí),會(huì)引發(fā)‘KeyError’異常。為避免這種情況的發(fā)生,可以使用collections類中的defaultdict()方法來為字典提供默認(rèn)值。該函數(shù)返回一個(gè)類似字典的對象。defaultdict是Python內(nèi)建字典類(dict)的一個(gè)子類。
dict = defaultdict(factory_function) # factory_function可以是list、set、str等等,作用是當(dāng)key不存在時(shí),返回的是工廠函數(shù)的默認(rèn)值
當(dāng)字典中沒有的鍵第一次出現(xiàn)時(shí),default_factory自動(dòng)為其返回一個(gè)空列表,list.append()
會(huì)將值添加進(jìn)新列表;再次遇到相同的鍵時(shí),list.append()
將其值再添加進(jìn)該列表。
總結(jié)
原文鏈接:https://blog.csdn.net/weixin_46707326/article/details/117387329
相關(guān)推薦
- 2022-06-13 Python+Matplotlib繪制雙y軸圖像的示例代碼_python
- 2022-11-17 Python?pyecharts模塊安裝與入門教程_python
- 2022-02-04 sql語句:查詢結(jié)果保留小數(shù)
- 2022-12-24 react時(shí)間分片實(shí)現(xiàn)流程詳解_React
- 2023-03-18 pandas檢查和填充缺失值的N種方法總結(jié)_python
- 2022-10-02 React構(gòu)建組件的幾種方式及區(qū)別_React
- 2023-11-14 樹莓派上如何安裝anaconda/miniconda環(huán)境配置
- 2022-07-22 Math.ceil() 函數(shù)使用介紹
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支