Python学习12-字典(dict)

查看所有Python相关学习笔记

字典(dict)

字典内元素是无序的

新增(创建)字典(key-value)

key 可以是字符串/整型/浮点型

  • 空字典-动态分配键值
dict1 = {}
dict1[1] = 3 # 如果这个键已存在,则会修改该键对应的值
dict1[2] = '3'
dict1['2'] = 3
dict1[3.12] = '哈哈'
print(dict1)
# 执行结果
{1: 3, 2: '3', '2': 3, 3.12: '哈哈'}
  • 传统文字表达式 key-values
dict2 = {1:3,2:'3','2':3,3.12:'哈哈'}
print(dict2)
# 执行结果
{1: 3, 2: '3', '2': 3, 3.12: '哈哈'}
  • 字典键值元组表
dict3 = dict(((1,3),(2,'3'),('2',3),(3.12,'哈哈')))
print(dict3)
# 执行结果
{1: 3, 2: '3', '2': 3, 3.12: '哈哈'}
  • 字典键值表键必须都是字符串才行,否则会报错

    键值必须为字符串,但不需要加引号

# 正确方法
dict4 = dict(dd=3,ddsaa=4)
print(dict4)
# 执行结果
{'dd': 3, 'ddsaa': 4}

# 错误方法
dict4 = dict(1=3,2='3','2'=3,3.12='哈哈')
print(dict4)
dict5 = dict('dd'=3,'ddsaa'=4)
print(dict5)
# 执行结果
SyntaxError: keyword can't be an expression

  • 所有键的值都相同或者赋予初始值-fromkeys方法

    第一个参数为列表或元组,第二个参数是值,如果第二个参数没有,则所有键的值是None

dict1= dict.fromkeys((1,2,3))
print(dict1)
# 执行结果
{1: None, 2: None, 3: None}

dict2 = dict.fromkeys(('ee','dd'),'number')
print(dict2)
# 执行结果
{'ee': 'number', 'dd': 'number'}

dict3 = dict.fromkeys((1,2,3),('number',1,2))
print(dict3)
# 执行结果
{1: ('number', 1, 2), 2: ('number', 1, 2), 3: ('number', 1, 2)}

取值

  • 方式一:字典名[key]
dict2 =  {'name':'jack','age':40}
print(dict2['age'])
# 执行结果
40
  • 方式二:get方法取值

如果查不到则返归指定的值

dict2 =  {'name':'jack','age':40}
print(dict2.get('age',10))
print(dict2.get('age1',10) 
# 执行结果
40
10
  • 方式三:setdefault方法
  1. 如果字典中存在,则返回对应的值,原字典不变。
dict1= dict.fromkeys((1,2,3),'值') # 新建字典
print(f'原字典:{dict1}')
c = dict1.setdefault(1,6)#key = 1 存在
print(f'set对应的值:{c}')
print(f'set后的字典:{dict1}')
# 执行结果
set对应的值:值
set后的字典:{1: '值', 2: '值', 3: '值', 5: None, 6: 6}
  1. 如果字典中不存在,则新增一个键,对应的值为第二个参数(第二参数如果没有,对应的值就为None)
dict1= dict.fromkeys((1,2,3),'值') # 新建字典
print(f'原字典:{dict1}')
a = dict1.setdefault(5)#key = 5 不存在
print(f'set对应的值:{a}') 
print(f'set后的字典:{dict1}')
b = dict1.setdefault(6,6)#key = 6 不存在
print(f'set对应的值:{b}')
print(f'set后的字典:{dict1}')
# 执行结果
原字典:{1: '值', 2: '值', 3: '值'}
set对应的值:None
set后的字典:{1: '值', 2: '值', 3: '值', 5: None}
set对应的值:6
set后的字典:{1: '值', 2: '值', 3: '值', 5: None, 6: 6}

  1. 应用:如果不存在则新增一个,value是一个list,如果已存在则在列表中加一个元素
dict1 = {}
dict1.setdefault('a',[]).append(1)
dict1.setdefault('cc',[]).append(2)
dict1.setdefault('a',[]).append(3)
print(dict1)
# 执行结果
{'a': [1, 3], 'cc': [2]}

  • 方式四:for循环取字典里的值
for key in dict #取出key
for key,value in dict.items() #取出key和value
for key in dict.keys() #取出key
for value in dict.values()#取出value
  • 方法五:取最大值和最小值对应的key(仅能获取一个key)
>>> d  = {1:1, 2:0, 3:2}
>>> d
{1: 1, 2: 0, 3: 2}
>>> min(d,key = d.get)
2
>>> max(d,key = d.get)
3

修改数据

  • 单个修改
from pprint import pprint
d = {1:1,2:2,3:3}
d[1] = 11111 # 如果该键不存在,则新增该键值
pprint(d)
# 执行结果
{1: 11111, 2: 2, 3: 3}
  • 批量修改:增加另一个dict的内容&或批量修改字典内容
from pprint import pprint
d = {1:1,2:2,3:3}
d.update({4:4,5:5})  # 批量新增
pprint(d)
d.update({2:33})  #批量修改
pprint(d)
# 执行结果
{1: 1, 2: 2, 3: 3, 4: 4, 5: 5}
{1: 1, 2: 33, 3: 3, 4: 4, 5: 5}

复制字典

  • copy方法指向不同地址

    修改其中一个字典,不会影响另一个

dict1= dict.fromkeys((1,2,3)) # 新建字典
print(dict1)
print(id(dict1))
dict2 = dict1.copy()  #copy字典
print(dict2)
print(id(dict2))
# 执行结果
{1: None, 2: None, 3: None}
4363826304
{1: None, 2: None, 3: None}
4362426336

  • 赋值方法指向同一地址

    修改其中一个字典,另一个同时也被修改

dict1= dict.fromkeys((1,2,3)) # 新建字典
print(dict1)
print(id(dict1))
dict3 = dict1  #赋值
print(dict3)
print(id(dict3))
# 执行结果
{1: None, 2: None, 3: None}
4363826376
{1: None, 2: None, 3: None}
4363826376

删除

  • 弹出指定键对应的值pop(key)
dict1= dict.fromkeys((1,2,3),'值') # 新建字典
print(f'原字典:{dict1}')
a = dict1.pop(1)
print(f'弹出的值:{a}')
print(f'弹出后的字典:{dict1}')
# 执行结果
原字典:{1: '值', 2: '值', 3: '值'}
弹出的值:值
弹出后的字典:{2: '值', 3: '值'}
  • 随机弹出键值对popitem()
dict1= dict.fromkeys((1,2,3),'值') # 新建字典
print(f'原字典:{dict1}')
a = dict1.popitem()
print(f'弹出的值:{a}')
print(f'弹出后的字典:{dict1}')
# 执行结果
原字典:{1: '值', 2: '值', 3: '值'}
弹出的值:(3, '值')
弹出后的字典:{1: '值', 2: '值'}

清空字典

  • 方法一:dict.clear()
    • 清空字典,原地址不变
    dict2 = {1:1,2:2}
    print(id(dict2))
    dict2 .clear()
    print(id(dict2))
    print(f'clear后:{dict2}')
    # 执行结果
    4538208
    4538208
    clear后:{}
    
    • 清空字典定义清空字典的函数时,此方法有效
    def test(dict0):
      dict0.clear()
      print(f'函数内:{id(dict0)}')
    dict1 = {1:1,2:2}
    print(f'函数调用前的id:{id(dict1)}')
    test(dict1)
    print(f'函数调用后的id:{id(dict1)}')
    print(f'clear后:{dict1}')
    
    # 执行结果
    函数调用前的id:6111072
    函数内:6111072
    函数调用后的id:6111072
    clear后:{}  
    
  • 方法二:dict = {}

    • 清空字典,地址已改变(相当于给原字典变量重新赋值了一个空的新字典)
    dict2 = {1:1,2:2}
    print(id(dict2))
    dict2 = {}
    print(id(dict2))
    print(f'{{}}后:{dict2}')
    # 执行结果
    33963872
    33963920
    {}后:{}
    
    • 清空字典定义清空字典的函数并调用该函数时,此方法无效
    def test(dict0):
      dict0 = {}
      print(f'函数内:{id(dict0)}')
    dict1 = {1:1,2:2}
    print(f'函数调用前的id:{id(dict1)}')
    test(dict1)
    print(f'函数调用后的id:{id(dict1)}')
    print(f'{{}}后:{dict1}')
    
    # 执行结果
    函数调用前的id:5980000
    函数内:6021360
    函数调用后的id:5980000
    {}后:{1: 1, 2: 2}
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容