Python基础---字典

字典的引入

      通讯录需要存储一连串的电话号码,用什么实现?用列表实现,如下所示

contacts = ["13525648697","16914752589"]

       看不清楚是谁的电话号码,显然不符合通讯录的基本目的 :通过名字查找号码。而字典可以将人名与电话号码绑定。字典用于存储键值对,键会有对应的值,键是用于查找值的,和现实生活中的字典很像。通过新华字典中的音节表,可以快速找到想要查找的汉字。其中,字典里的音节表就相当于字典类型中的键,而键对应的汉字则相当于值。

字典的特征
主要特征 解释
通过键而不是通过索引来读取元素 字典类型有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。
字典是任意数据类型的无序集合(自 Python 3.7+ 起,字典会保留插入顺序,但通常仍视为无序集合) 和列表、元组不同,通常会将索引值 0 对应的元素称为第一个元素,而字典中的元素是无序的。
字典是可变的,并且可以任意嵌套 字典可以在原处增长或者缩短(无需生成一个副本),并且它支持任意深度的嵌套,即字典存储的值也可以是列表或其它的字典。
字典中的键必须唯一 字典中,不支持同一个键出现多次,否则只会保留最后一个键值对。
字典中的键必须不可变 字典中每个键值对的键是不可变的,只能使用数字、字符串或者元组,不能使用列表。
字典的建立
#键的建立 在创建字典时,键和值之间使用冒号:分隔,相邻元素之间使用逗号,分隔,所有元素放在大括号{ }中。
contacts = {"小红":"13525648697","小明":"16914752589"}
元组与字典 

      建立的通讯录中存储了几个名字相同的人的电话号码,需要再为其添加年龄来区别他们,建立的字典如下:

#会引起报错
contacts = {["张伟",23]:"15512151425",
            ["张伟",18]:"19912151425",
            ["张伟",50]:"18512851425"}

     上述字典的键采用了列表,列表是可变的,违背了字典中的键必须不可变这一特征从而报错,但Python为我们提供了一个类似列表的序列结构,就是元组。

元组和列表(list)的不同之处在于:

  • 列表的元素是可以更改的,包括修改元素值,删除和插入元素,所以列表是可变序列;
  • 而元组一旦被创建,它的元素就不可更改了,所以元组是不可变序列。
#修正后的字典  元组是不可变的,因此可以作为字典的键
contacts = {("张伟",23):"15512151425",
            ("张伟",18):"19912151425",
            ("张伟",50):"18512851425"}

字典的操作

contacts = {"张伟":"15512151425",
            "小丽":"19912151425",
            "夏鸥":"18512851425"}
'''为字典添加新的键值对很简单,直接给不存在的key赋值即可
#具体语法格式:dictname[key] = value
dictname 表示字典名称。
key 表示新的键。
value 表示新的值,只要是 Python 支持的数据类型都可以'''
contacts["小美"] = "12215184967"
print(contacts)  #运行结果为:{'张伟': '15512151425', '小丽': '19912151425', '夏鸥': '18512851425', '小美': '12215184967'}

#Python字典修改键值对  Python字典的键本身不可修改,我们只能修改值(value)
contacts["小美"] = "12345678910"
print(contacts)  #运行结果为:{'张伟': '15512151425', '小丽': '19912151425', '夏鸥': '18512851425', '小美': '12345678910'}

#如果要判断字典中是否存在指定键值对,首先应判断字典中是否有对应的键。判断字典是否包含指定键值对的键,可以使用 in 或 not in 运算符
# 判断 contacts  中是否包含名为'张伟'的key
print('张伟' in contacts) # True
# 判断 contacts  是否包含名为'花花'的key
print('花花' in contacts) # False

#删除字典中的键值对,可以使用 del 语句 ,使用 del 删除不存在的键会报错,建议先用 in 检查键是否存在
del contacts['小美']
del contacts['小丽']
print(contacts)  #运行结果为:{'张伟': '15512151425', '夏鸥': '18512851425'}

#字典有几个键值对
len(contacts)
print(len(contacts))  #打印长度,其输出结果为:2
最佳实践
#结合input,字典,if判断...制作一个查询网络流行语含义的电子字典
slang_dict = {"偷感(很重)":"指人们在做某些事的时候底气不足或怕引起关注,所以整个人的画风总是显得“小心翼翼+偷偷摸摸”的",
              "班味":"指人们在上班后懒得打扮自己,从“青春代言人”向着“无聊的大人”快速转变"}
slang_dict["那咋了"] = "网友们对抗内耗的常用句。它所代表的核心思想是“以自己的感觉为主,不被他人左右”。常见的使用场景是A抛出问题,B因为不认可对方的观点用“那咋了”快速回应"
slang_dict["city/city不city"] = "源自于美国博主保保熊和妹妹在中国旅游时的一段对话“上海city不city啊?”“好city啊!”因为外国人口音独特,该内容在网上迅速走红。city/city不city,也开始被网友们用来代指现代化、洋气等概念"
slang_dict["包××的/包的"] = "最早出现在某游戏博主的评论区,人们一般用“包赢的”表达“肯定赢、保证赢”的意思。出圈后成为年轻人的常用句式,表示自己对某件事的成功极度自信"
slang_dict["红温"] = "源自游戏角色“兰博”,其技能机制为机甲过热后进入“红温”状态,从而获得额外属性增益。“红温”一词后被网友形容某人生气时面色通红的样子,它的使用场景类似于之前流行的“急了”“破防”等"
slang_dict["搞抽象"] = "源自于某游戏主播的口头禅——“真是太抽象了”。随着主播的走红,“抽象”“搞抽象”也开始被网友们用来代指一切反常规、荒诞、戏谑的内容,并逐渐进化出了释放情绪、用娱乐内容解构热点信息的“抽象文化”"
slang_dict["松弛感"] = "指遇事能从容应对、善待自己、不慌张、不焦虑的状态"
slang_dict["小孩哥/小孩姐"] = "指在某方面具有过人才能的孩子"
slang_dict["没事哒没事哒"] = "源于抖音短视频,表达安慰或自嘲"

#查询功能
query = input("请输入您想要查询的流行语:").strip()  # 去除首尾空格
if query in slang_dict:
    print("您要查询的" + query + "含义如下:")
    print(slang_dict[query])
else:
    print("您查询的流行语暂未收录。")
    print("当前本词典收录的词条数为" + str(len(slang_dict)) + "条。")

你可能感兴趣的:(Python基础,python,开发语言)