03 Python数据类型之字典

本文详细介绍了字典的基本概念、特点及多种构造方法,包括关键字的选择、字典的增删改查操作,以及常见字典方法如get、update等的使用。并通过房价实例展示了字典的动态操作。

字典(dictionary)

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

字典是无序的键:值对(key:value对)集合,键必须是互不相同的(在同一个字典之内)。使用大括号创建一个空的字典:{}.初始化列表时,在大括号内放置一组逗号分隔的键:值对,这也是字典输出的方式。

字典的主要操作时依据键来存储和取值。也可以用del来删除键:值对(key:value),从一个不存在的键中取值会导致错误

# 房价的一个例子
house_price = {"beijing":60980,"shenzhen":43390,"haikou":24000}
house_price["chengdu"] = 12000
print("存储房价信息的字典:",house_price)
print("海口的房价为:",house_price["haikou"])
存储房价信息的字典: {'beijing': 60980, 'shenzhen': 43390, 'haikou': 24000, 'chengdu': 12000}
海口的房价为: 24000
del house_price["haikou"]
house_price["shanghai"] = 50000
print(house_price)
print(house_price.keys())
print("chengdu" in house_price)
print("heifei" in house_price)
{'beijing': 60980, 'shenzhen': 43390, 'chengdu': 12000, 'shanghai': 50000}
dict_keys(['beijing', 'shenzhen', 'chengdu', 'shanghai'])
True
False

常见字典操作方法

D.clear() 删除字典内所有元素

D.copy() 返回一个字典的复制

D.fromkeys(seq,val) 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值

D.get(key,default=None) 返回指定键的值,如果值不在字典中返回default的值

D.has_key(key) 如果键在字典dict里返回true,否则返回false

D.items() 以列表返回可遍历的(键,值)元组数组

D.keys() 以列表返回一个字典所有的键

D.setdefault(key,default=None)和get()类似,但如果键不存在与字典中,将会添加键并将值设为default

D.update(dict2) 把字典dict2的键/值对更新到dict里

D.values() 以列表返回字典中的所有值

D.pop(key) 删除一个键并返回它的值,类似于列表的pop,只不过删除的是一个键不是一个可选的位置

del D[key] 删除键

D[key] = 42新增或修改键

字典用法注意事项:

1.序列运算无效,字典元素间是没有顺序的概念

2.对新索引赋值会添加项

3.键不一定总是字符串

# 返回指定键的值,如果值不在字典中,返回default的值
print("北京房价",house_price.get("beijing",0))

print("重庆房价",house_price.get("chongqing",0))
北京房价 60980
重庆房价 0

多种构造字典方式

dict()构造函数可以直接从key-value对中创建字典

# 另外一种构造字典的方式
dict([("beijing",60980),("shenzhen",49390),("haikou",24000)])
{'beijing': 60980, 'shenzhen': 49390, 'haikou': 24000}
#创建一个新字典,以序列seq中元素做字典的键,val为字典所有对应的初始值
dict.fromkeys(["a","b"],0) 
{'a': 0, 'b': 0}
dict(zip(["beijing","shenzhen","haikou"],[60980,49390,24000]))
{'beijing': 60980, 'shenzhen': 49390, 'haikou': 24000}
{k:v for (k,v) in zip(["beijing","shenzhen","haikou"],[60980,49390,24000])}
{'beijing': 60980, 'shenzhen': 49390, 'haikou': 24000}
# 通过字典推导式构造字典
{x:x**2 for x in (2,4,6)}
{2: 4, 4: 16, 6: 36}
#模式是集合
{c:c*4 for c in "python"}
{'p': 'pppp', 'y': 'yyyy', 't': 'tttt', 'h': 'hhhh', 'o': 'oooo', 'n': 'nnnn'}
dict(a=1,b=2,c=3)
{'a': 1, 'b': 2, 'c': 3}
{c.lower():c*4+"!" for c in "python"}
{'p': 'pppp!',
 'y': 'yyyy!',
 't': 'tttt!',
 'h': 'hhhh!',
 'o': 'oooo!',
 'n': 'nnnn!'}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mind_programmonkey

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值