码迷,mamicode.com
首页 > 编程语言 > 详细

Python基础(二)之数据类型和运算(7)——字典

时间:2018-01-05 15:50:00      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:font   基础   info   可变   test   ali   内存   app   print   

字典

字典在某些语言中可能称为 联合内存 ( associative memories )或 联合数组 ( associative arrays )。序列是以连续的整数为索引,与此不同的是,字典以 关键字 为索引,关键字可以是任意不可变类型,通常用字符串或数值。如果元组中只包含字符串和数字,它可以做为关键字,如果它直接或间接的包含了可变对象,就不能当做关键字。不能用列表做关键字,因为列表可以用索引、切割或者 append()extend() 等方法改变。

理解字典的最佳方式是把它看做无序的键: 值对 (key:value 对)集合,键必须是互不相同的(在同一个字典之内)。

1 info = {
2     stu1101: "TengLan Wu",
3     stu1102: "LongZe Luola",
4     stu1103: "XiaoZe Maliya",
5 }

 

 字典的特性:

  • dict是无序的
  • key必须是唯一的,so 天生去重

基本功能

查找value:

#索引
print( info[stu1101] )  #key中存在时显示value,如果key不存在则报错
>>>TengLan Wu
print(info.get(‘stu1102‘)) #常用这个,key不存在时返回None,而不是报错
>>>TengLan Wu

print(info.get(‘stu1106‘))  
>>>None

查找key:

>>> "stu1102" in info #标准用法
True

修改:

#修改
info[stu1102] = Alex li
print(info)

>>>{stu1101: TengLan Wu, stu1102: Alex li, stu1103: XiaoZe Maliya}

增加:

# 增加
info[stu1104] = "Jack Wang"
print(info)

>>>{stu1101: TengLan Wu, stu1102: LongZe Luola, stu1103: XiaoZe Maliya, stu1104: Jack Wang}

 删除:

#删除
del info[stu1101]
print(info)

>>>{stu1102: LongZe Luola, stu1103: XiaoZe Maliya}

info.pop(stu1102)    #和del 相同
print(info)

>>>{stu1101: TengLan Wu, stu1103: XiaoZe Maliya}

info.popitem()        #随机删除
print(info)

>>>{stu1101: TengLan Wu, stu1102: LongZe Luola}

 

其他功能

字典生成列表

#key列表
ret = info.keys()
print(ret)
#value列表
ret = info.values()
print(ret)
#key-value列表
ret = info.items()
print(ret)

>>>
dict_keys([stu1101, stu1102, stu1103])
dict_values([TengLan Wu, LongZe Luola, XiaoZe Maliya])
dict_items([(stu1101, TengLan Wu), (stu1102, LongZe Luola), (stu1103, XiaoZe Maliya)])

 其他增加、修改字典的方法

#setdefault

>>> info.setdefault("stu1106","Alex")     #没有1106,就创建新的Key
Alex
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya, stu1106: Alex}
>>> info.setdefault("stu1102","龙泽萝拉")   #存在1102,就不再创建,也不更改原有值
LongZe Luola
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya, stu1106: Alex}
#update 
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya, stu1106: Alex}
>>> b = {1:2,3:4, "stu1102":"龙泽萝拉"}
>>> info.update(b)
>>> info
{stu1102: 龙泽萝拉, 1: 2, 3: 4, stu1103: XiaoZe Maliya, stu1106: Alex}#存在的key,更新数据:不存在的Key,创建新数据

 

 

#通过一个列表生成默认dict,有个没办法解释的坑,少用吧这个
c = dict.fromkeys([1,2,3],testd)
print(c)
>>>{1: testd, 2: testd, 3: testd}

c[1] = "yang"
print(c)
>>>{1: yang, 2: testd, 3: testd}



d = dict.fromkeys([4,5,6],[1,{"name":"alex"},55])
print(d)
>>>{4: [1, {name: alex}, 55], 5: [1, {name: alex}, 55], 6: [1, {name: alex}, 55]}

d[4][1][name] = "Yang"    #坑在此,浅拷贝
print(d)
>>>{4: [1, {name: Yang}, 55], 5: [1, {name: Yang}, 55], 6: [1, {name: Yang}, 55]}

 

  

字典的循环

#循环的是key
for
i in info: print(i) >>> #默认为输出KEY stu1101 stu1102 stu1103 #输出value,建议使用 for i in info: print(i,info[i]) >>> stu1101 TengLan Wu stu1102 LongZe Luola stu1103 XiaoZe Maliya #另一个输出value的方法,生成列表运行会慢 for k,v in info.items(): print(k,v) >>> stu1101 TengLan Wu stu1102 LongZe Luola stu1103 XiaoZe Maliya

 

Python基础(二)之数据类型和运算(7)——字典

标签:font   基础   info   可变   test   ali   内存   app   print   

原文地址:https://www.cnblogs.com/yz9110/p/8203689.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!