本系列要对Python在数据处理中经常用的列表(list)、元组(tuple)、字典(dictionary)、array(数组)-numpy、DataFrame-pandas 、集合(set)等数据形式的特征、常用操作进行详述。
Python数据系列:
今天,开启本系列的第二篇文章---Python数据系列(二)- 字典Dictionary:Python的“大胃王”。
字典:用“{}”标识,又索引(key)和它对应的值(value)组成,键值为键值对。它是除列表以外,python中最灵活的内置数据结构类型。类似于其他语言的k-v数据类型。
一、字典具有如下的特点
-
字典是另一种可变容器模型,且可存储任意类型对象。
-
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 } -
键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
-
字典中的元素是通过key关键字来存取的,而不是通过偏移存取的。
-
字典是无序的对象组合,列表时有序的对象组合。
-
字典可以嵌套,也就是字典里面嵌套字典,可多层嵌套。
二、字典的创建、修改、添加、清空、删除
In [1]: dict={"class":"5","name":"莉莉","年龄":"12"}
In [2]: dict
Out[2]: {class: 5, name: 莉莉, 年龄: 12}
In [3]: dict["name"] # 取对应键的值
Out[3]: 莉莉
In [4]: dict["class"]="6" # 给键赋予新值
In [5]: dict["年龄"]="7"
In [6]: dict
Out[6]: {class: 6, name: 莉莉, 年龄: 7}
In [7]: dict["年龄"]="13"
In [8]: dict
Out[8]: {class: 6, name: 莉莉, 年龄: 13}
In [9]: dict["father"]="wangxiao" # 给字典增加新的键值对
In [10]: dict
Out[10]: {class: 6, father: wangxiao, name: 莉莉, 年龄: 13}
In [11]: del dict["father"] # 删除字典内指定键值对
In [12]: dict
Out[12]: {class: 6, name: 莉莉, 年龄: 13}
In [13]: dict.clear() # 清空字典
In [14]: dict
Out[14]: {}
In [15]: del dict # 删除字典
In [16]: dict
Out[16]: dict
三、字典的常用操作
In [1]: dict={"class":"5","name":"莉莉","年龄":"12"}
In [2]: len(dict) # 计算字典元素个数,即键的总数
Out[2]: 3
In [3]: str(dict) # 将值转化为适于人阅读的形式,以可打印的字符串表示
Out[3]: "{class: 5, 年龄: 12, name: 莉莉}"
In [4]: dict
Out[4]: {class: 5, name: 莉莉, 年龄: 12}
In [5]: for key,value in dict.items(): # 遍历字典的键、值
...: print(key)
...: print(value)
...:
class
5
年龄
12
name
莉莉
In [6]: dict.get("class") # 获取对应键的值,和dict["class"]类似
Out[6]: 5
In [7]: dict.has_key("class") # 判定字典内是否有该键值对
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-7-ac723f5f8be5> in <module>()
----> 1 dict.has_key("class")
AttributeError: dict object has no attribute has_key
In [8]: dict.__contains__("class") # Python 3.X 里不包含 has_key() 函数,被 __contains__(key) 替代
Out[8]: True
In [9]: dict.items() # 字典内内容
Out[9]: dict_items([(class, 5), (年龄, 12), (name, 莉莉)])
In [10]: dict.keys() # 取字典内的键
Out[10]: dict_keys([class, 年龄, name])
In [11]: dict2={"mother":"feifei"}
In [12]: dict.update(dict2) # 将另一个字典与该字典融合
In [13]: dict
Out[13]: {class: 5, mother: feifei, name: 莉莉, 年龄: 12}
In [14]: dict.values
Out[14]: <function dict.values>
In [15]: dict.values() # 取字典内的值
Out[15]: dict_values([5, feifei, 12, 莉莉])
In [16]: dict.pop("mother") # 删除字典内指定键值对,返回对应键的值
Out[16]: feifei
In [17]: dict
Out[17]: {class: 5, name: 莉莉, 年龄: 12}
四、字典的对比,由于python版本的升级,存在的问题
In [1]: dict={"class":"5","name":"莉莉","年龄":"12"}
In [2]: dict1={"class":"5","name":"莉莉","年龄":"12"}
In [3]: cmp(dict,dict1) # 比较两个字典
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-3-3e150a9f899c> in <module>()
----> 1 cmp(dict,dict1)
NameError: name cmp is not defined
# python 3.4.3 的版本中已经没有cmp函数,被operator模块代替,在交互模式下使用时,需要导入模块。
In [4]: import operator
In [5]: operator.eq(dict,dict1)
Out[5]: True
In [6]: dict1={"class":"5","name":"莉莉","年龄":"15"}
In [7]: operator.eq(dict,dict1)
Out[7]: False
In [8]:
上一篇文章Python数据系列(一)- 列表List:Python的“苦力”得到了很多小伙伴的反馈,说到list的copy和deepcopy,这块的内容由于在数据的多个形式都出现过,拷贝部分在后期文章专门进行介绍。
本期对字典dict的基本操作,大体上包含了在日常学习工作中最常用到的操作形式。希望上述的整理能够对你接下来的学习有所帮助。更多关于Python的操作,可进入公众号,点击“历史信息”,查看更多精彩文章。
本系列下一篇文章,我们探讨一下不可变序列--元组(tuple),这是一个拥有比list更加强大功能的数据形式。
五、补充
5.1、2021.02.01追更:string转为dict
user = "{'name' : 'jim', 'sex' : 'male', 'age': 18}"
print(type(user))
b=eval(user)
print(b)
print(type(b))
打印结果:
<class 'str'>
{'name': 'jim', 'sex': 'male', 'age': 18}
<class 'dict'>
5.2、判断python字典中key是否存在的两种方法
#生成一个字典 d = {'name':Tom, 'age':10, 'Tel':110}
#打印返回值,其中d.keys()是列出字典所有的key
print ‘name’ in d.keys()
print 'name' in d #两个的结果都是返回True
5.3、排列字典数据
In [42]: prices = {
...: 1: 45.23,
...: 7: 612.78,
...: 3: 205.55,
...: 8: 37.20,
...: 5: 10.75
...: }
# 按keys值大小进行排序
In [43]: prices_sorted = sorted(zip(prices.keys(), prices.values()))
In [44]: prices_sorted
Out[44]: [(1, 45.23), (3, 205.55), (5, 10.75), (7, 612.78), (8, 37.2)]
# 按values值大小进行排序
In [45]: prices_sorted_values = sorted(zip(prices.values(), prices.keys()))
In [46]: prices_sorted_values
Out[46]: [(10.75, 5), (37.2, 8), (45.23, 1), (205.55, 3), (612.78, 7)]
六、总结
字典这种数据形式,应该是在python中,除列表外,使用最多的一种数据形式了。尤其是在数据的存储和查询的阶段,非常的好用。并且一个字典可以结构化的存储很多的内容,真是一个大胃王。在你需要用的时候,又非常的好用,很nice的一种数据类型。
最后,如果您觉得本篇文章对你有帮助,欢迎点赞,让更多人看到,这是对我继续写下去的鼓励。如果能再点击下方的红包打赏,给博主来一杯咖啡,那就太好了。
参考链接:1.8 字典的运算 — python3-cookbook 3.0.0 文档
往期回顾