Python字典的介绍和使用
admin
2023-01-20 06:40:56
0

Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。字典是另一种可变容器模型,且可存储任意类型对象。

一、什么是字典

字典是python里的一种数据类型,特点是元素的无序性,和键key的唯一性。字典的创建方法是{key:values},字典里的键key只能是不可变的数据类型(整型,字符串或者是元组),值values可以是任何数据类型。字典里的一组key:values叫做一个键值对item。

1、字典的实现原理

     字典的实现原理和差字典是类似的。当我们在字典中查找某个字时,一种办法是从字典的第一页开始往后翻,

直到找到我们要查找的字为止。这种办法就是在列表中查找元素的方法,其缺点:字典中的字数越多查找的效率

越低。第二种方法是先在字典的索引表里(比如部首表)查找这个字对应的页码,然后直接到这个字对应的页,

其优点是:查找效率不会随着字典中字数的增加而降低,无论查找哪个字,查找速度非常快。

2、字典的特点

a)  字典中的所有元素都是一个key-value时,通过指定的key总能映射到唯一确定的value。字典中不可以存在重复的,

但是可以存在重复的value。

b) 字典中的元素是无序的。顺序不重要重要的是key和value的映射关系。

c)  字典中的key必须是不可变对象。存取字典中的key-value对时,系统会调用内置函数hash根据指定key计算出value

存储位置,也就是哈希值。对于指定的key,为了保证每次计算出的哈希值都是相同的,要求key必须是不可变对象。也就是说,

只有不可变对象才存在哈希值。

d)  字典可以根据需要动态地伸缩。系统会根据需要动态分配和回收内存,因此在使用前无须预先声明字典的容量。

e)  字典会浪费较大的内存,与列表相比是用空间换取查询时间。


二、为什么需要字典

例如:电话簿中存储了姓名和电话号码:

    张三  111111111

    李四  222222222

    王五  333333333

    赵六  444444444

# 姓名

names = ['张三','李四','王五','赵六']

# 电话号码

numbers = ['111111111','222222222','333333333','444444444']

print(numbers[names.index('张三')]) # 111111111
for i,n in zip(names,numbers):
    print(i,n)
#或者使用zip进行并行遍历
张三 111111111
李四 222222222
王五 333333333
赵六 444444444


最好是能把姓名和电话号码全部存储在一个和脚phonebook的数据结构中,就能直接获得其对应的电话号码。

phonebook = {'张三':'111111111','李四':'222222222','王五':'333333333','赵六':'444444444'}
print(phonebook['张三']) #111111111


三、字典的创建

1、使用花括号{}的方式

d1 = {'zhangsan':18,'lisi':19,'wangwu':20}
print(d1) # {'zhangsan': 18, 'lisi': 19, 'wangwu': 20}
#空字典创建
d1 = {}
print(d1) # {}


2、使用内置函数dict()

#传递字典参数
d2 = dict({'zhangsan':18,'lisi':19,'wangwu':20})
print(d2) # {'zhangsan': 18, 'lisi': 19, 'wangwu': 20}
#传递带元组的列表
d2 = dict([('zhangsan',18),('lisi',19),('wangwu',20)])
print(d2) # {'zhangsan': 18, 'lisi': 19, 'wangwu': 20}
#传递zip迭代对象
d2 = dict(zip(['zhangsan','lisi','wangwu'],(18,19,20)))
print(d2) # {'zhangsan': 18, 'lisi': 19, 'wangwu': 20}


四、字典的增删改查

1、查操作

#使用[]的方法传递索引
d1 = dict([('name','zhangsan'),('age',18)])
print(d1['name'])
print(d1['age'])

#get方法
print(d1.get('name')) # zhangsan
print(d1.get('age'))  # 18
print(d1.get('abc','NONE')) # get允许我们自定义返回值,如果不存在对应值或索引时


2、增操作

d1['hobby'] = 'games'  #增加一个不存在的key-value对
d1.update([('wang',17),('li',16)])  # 使用update方法,一次增加多个key-value对
d1.update({'tianqi':'19'})
d1.update(zhangsan1 = 18)
print(d1)  # {'name': 'zhangsan', 'age': 18, 'hobby': 'games', 'wang': 17, 'li': 16, 'tianqi': '19', 'zhangsan1': 18}


3、改操作

d1['age'] = '27'
d1.update(wang = 22,tianqi = 23)
d1.update({'name':'zhangsan1'})
d1.update(hobby = 'read')
d1.update([('tianqi',23),('zhangsan',25)])
print(d1)  # {'name': 'zhangsan1', 'age': '27', 'hobby': 'read', 'wang': 22, 'li': 16, 'tianqi': 23, 'zhangsan1': 18, 'zhangsan': 25}


4、删操作

d1 = {'name': 'zhangsan1', 'age': '27', 'hobby2': 'games', 'hobby1': 'read', 'zhangsan': 25}
d1.pop('name')  # 删除一个指定key
d1.popitem()  #随机删除一个key
del(d1['age']) # 删除一个指定key
print(d1)  # {'hobby2': 'games', 'hobby1': 'read'}
d1.clear() # 清空列表
print(d1) # {}


五、字典的视图

1、调用keys,values,iteams方法打印字典视图

print(d1.keys(),type(d1.keys()))  # dict_keys(['name', 'age', 'hobby2', 'hobby1', 'zhangsan'])  打印字典的key
print(d1.values(),type(d1.values())) # dict_values(['zhangsan1', '27', 'games', 'read', 25])  打印字典的values
print(d1.items(),type(d1.items())) # dict_items([('name', 'zhangsan1'), ('age', '27'), ('hobby2', 'games'), ('hobby1', 'read'), ('zhangsan', 25)])  # 打印字典的key-value


六、为字典设置默认值

1、使用dict.setdefault()方法为字典设置默认值

# 为字典设置默认值
d1 = dict([('name','zhangsan'),('age',18),('hobby','games')])
print(d1.setdefault('name')) # zhangsan 当key-value存在时,返回对应值
print(d1.setdefault('score',90)) # 90  # 当key-value不存在时,赋予默认值,并添加到字典中
print(d1) # {'name': 'zhangsan', 'age': 18, 'hobby': 'games', 'score': 90}


七、借助字典创建格式化字符串

d1 = dict([('name','zhangsan'),('age',18),('hobby','games')])
# 使用%作为占位符
print('名字是:%s,年龄是:%i,爱好是:%s' % (d1['name'],d1['age'],d1['hobby']))
print('名字是:%(name)s,年龄是:%(age)i,爱好是:%(hobby)s' % d1)
# 使用{}作为占位符
print('名字是:{},年龄是:{},爱好是:{}' .format(d1['name'],d1['age'],d1['hobby']))
print('名字是:{name},年龄是:{age},爱好是:{hobby}' .format_map(d1))


相关内容

热门资讯

今日重大发现“非凡卡五星.真的... 您好:非凡卡五星这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游...
玩家分享攻略“悟空黑桃A.究竟... 网上科普关于“悟空黑桃A有没有挂”话题很是火热,小编也是针对悟空黑桃A作*弊开挂的方法以及开挂对应的...
【第一消息】“功夫熊猫炸金花.... 网上科普关于“功夫熊猫炸金花有没有挂”话题很是火热,小编也是针对功夫熊猫炸金花作*弊开挂的方法以及开...
今日重大通报“胡乐邯郸麻将.可... 您好:胡乐邯郸麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款...
“西方联盟已经结束了”,欧洲外... 美国新版《国家安全战略》报告对欧洲大肆挞伐,双边关系生变。在华盛顿举行的圣诞派对上,气氛压抑,一些欧...
【今日要闻】“天天爱蚌埠麻将.... 【今日要闻】“天天爱蚌埠麻将.是不是有挂?”详细开挂教程您好,天天爱蚌埠麻将这个游戏其实有挂的,确实...
玩家分享攻略“新大圣牛牛.有没... 网上科普关于“新大圣牛牛有没有挂”话题很是火热,小编也是针对新大圣牛牛作*弊开挂的方法以及开挂对应的...
山东移动AI赋能交通执法,实现... 在数字化浪潮深刻重塑社会运行模式的当下,人工智能正以前所未有的深度融入公共治理领域,推动管理模式向精...
我来教教您“九九山城麻将.辅助... 您好:九九山城麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款...
今日重大发现“开心武汉花.怎么... 家人们!今天小编来为大家解答开心武汉花透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买...