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

字典

字典在某些语言中可能称为 联合内存 ( 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

 

posted @ 2018-01-05 12:16  有点黑的小白  阅读(276)  评论(0编辑  收藏  举报