ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【Python笔记】字典

2019-08-17 20:01:30  阅读:355  来源: 互联网

标签:dictionary Python 张三 笔记 李四 王五 print 字典


Python 字典

字典的创建和删除

赋值创建字典

dictionary = {'张三':'爸爸', '李四':'哥哥', '王五':'儿子' }
print(dictionary)

运行结果:

{'张三': '爸爸', '李四': '哥哥', '王五': '儿子'}

创建空字典

dictionary = {}

或者

dictionary = dict()
print(dictionary)

运行结果:

{}

通过映射函数创建字典

语法如下:

dictionary = dict(zip(list1, list2))

参数说明:
zip() 函数:用于将多个列表或元组对应位置的元素组合为元组,并返回包含这些内容的 zip 对象

如下例所示:

name = ['张三', '李四', '王五']
sign = ['爸爸', '哥哥', '儿子']
dictionary = dict(zip(name,sign)) # zip() 返回的是一个 zip 对象,而不是元组
print(dictionary)

运行结果:

{'张三': '爸爸', '李四': '哥哥', '王五': '儿子'}

通过给定的“键值对”创建字典

dictionary = dict(张三 = '爸爸', 李四 = "哥哥", 王五 = "儿子" )
print(dictionary)

运行结果:

{'张三': '爸爸', '李四': '哥哥', '王五': '儿子'}


在 Python 中,还可以使用 dict 对象的 fromkeys() 方法创建 值为空 的字典

name_list = ['张三', '李四', '王五']
dictionary = dict.fromkeys(name_list)
print(dictionary)

运行结果:

{'张三': None, '李四': None, '王五': None}


另外,可以通过已经存在的元组和列表创建字典。

name_tuple = ('张三', '李四', '王五') # 键 不可变,需要是元组类型
sign = ['爸爸', '哥哥', '儿子']
dictionary = {name_list:sign} # 不可用 dict() 创建
print(dictionary)

运行结果:

{('张三', '李四', '王五'): ['爸爸', '哥哥', '儿子']}

删除字典

同列表和元组一样,不再需要的字典可以使用 del 命令删除整个字典

del dictionary

另外,如果只是想删除字典的全部元素,可以使用字典对象的 clear() 方法实现。执行 clear() 方法后,原字典将变为空字典。

dictionary.clear()

通过“键值对”访问字典

dictionary = {'张三':'爸爸', '李四':'哥哥', '王五':'儿子' }
print(dictionary) # 直接打印字典全部内容
print(dictionary["张三"] if "张三" in dictionary else "字典里没有这个人")
print(dictionary["赵六"] if "赵六" in dictionary else "字典里没有这个人") # 访问字典不存的键会报错,加入判断语句避免报错

运行结果:

{'张三': '爸爸', '李四': '哥哥', '王五': '儿子'}
爸爸
字典里没有这个人


推荐使用 get() 方法获取字典中指定键的值

dictionary = {'张三':'爸爸', '李四':'哥哥', '王五':'儿子' }
# get() 中第二个参数为默认值,当字典找不到指定对象时,会采用默认值
print(dictionary.get("张三", "字典中没有这个人"))
print(dictionary.get("赵六", "字典中没有这个人")) 

运行结果:

爸爸
字典中没有这个人

遍历字典

字典是以“键值对”的形式存储数据的,所以在使用字典时需要获取到这些“键值对”。Python 提供了遍历字典的方法,通过遍历可以获取字典中的全部“键值对”。

使用字典对象的 items() 方法可以获取字典的“键值对”列表。语法格式如下:

dictionary.items()

其中,dictionary 对字典对象;返回值为可遍历的(“键值对”) 的元组列表。想要获取到具体的“键值对”,可以通过 for 循环遍历该元组列表。

例如,定义一个字典,通过 items() 方法获取“键值对”的元组列表,并输出全部“键值对”,代码如下:

dictionary = {'qq':'370166800' , 'name':'yusael', 'music':'can you hear'}
print(dictionary.items()) # 返回的是 “内容是元组的列表”
for items in dictionary.items():
    print(items)

运行结果:

dict_items([('qq', '370166800'), ('name', 'yusael'), ('music', 'can you hear')])
('qq', '370166800')
('name', 'yusael')
('music', 'can you hear')

上面的实例得到的是元组中的各个元素,如果想要获取到具体的每个键和值,可以使用下面的代码进行遍历:

dictionary = {'qq':'370166800' , 'name':'yusael', 'music':'can you hear'}
for key,value in dictionary.items():
    print("键是:", key, "值是:", value )

运行结果:

键是: qq 值是: 370166800
键是: name 值是: yusael
键是: music 值是: can you hear

可以通过 keys() 方法获取键的列表,通过 values() 方法获取值的列表:

dictionary = {'qq':'370166800' , 'name':'yusael', 'music':'can you hear'}
print(dictionary.keys())
print(dictionary.values())

运行结果:

dict_keys(['qq', 'name', 'music'])
dict_values(['370166800', 'yusael', 'can you hear'])

添加、修改和删除字典元素

由于字典是可变序列,所以可以随时在其中添加“键值对”,这和列表类似。

dictionary = {'张三':'爸爸', '李四':'哥哥', '王五':'儿子' }
dictionary["赵六"] = "爷爷" # 直接添加新的键值对
print(dictionary)

运行结果:

{'张三': '爸爸', '李四': '哥哥', '王五': '儿子', '赵六': '爷爷'}


由于在字典中,“键” 必须是唯一的,所以如果新添加元素的 “键” 与已经存在的 “键” 重复,将会使用新的 “值” 替换原来的值,这也相当于修改字典的元素

dictionary = {'张三':'爸爸', '李四':'哥哥', '王五':'儿子' }
dictionary["张三"] = "Father"
print(dictionary)

运行结果:

{'张三': 'Father', '李四': '哥哥', '王五': '儿子'}


当字典中的某一个元素不需要时,可以使用 del 命令 将其删除

dictionary = {'张三':'爸爸', '李四':'哥哥', '王五':'儿子' }
del dictionary["李四"]
print(dictionary)

运行结果:

{'张三': '爸爸', '王五': '儿子'}

注:当要删除的键不存在时,会抛出异常


字典推导式

使用字典推导式可以快速生成一个字典,它的表现形式与列表推导式类似。例如,我们可以使用下面的代码生成一个包含 4 个随机数的字典,其中字典的键使用数字表示:

import random
randomdict = {i:random.randint(10,100) for i in range(1,5)}
print(randomdict)

运行结果:

{1: 69, 2: 11, 3: 11, 4: 25}

标签:dictionary,Python,张三,笔记,李四,王五,print,字典
来源: https://blog.csdn.net/weixin_43734095/article/details/99696474

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有