Python数据系列(二)- 字典Dict:Python的“大胃王”,实在好用

本系列要对Python在数据处理中经常用的列表(list)、元组(tuple)、字典(dictionary)、array(数组)-numpy、DataFrame-pandas 、集合(set)等数据形式的特征、常用操作进行详述。

Python数据系列:

Python数据系列(一)- 列表List: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 文档

往期回顾

  1. 知识图谱基础(一)- 什么是知识图谱

  2. 知识图谱基础(二)- 知识图谱的知识表达系统

  3. 知识图谱基础(三)- schema的构建

  4. Python: 告别Print?优秀的Debug神器---pysnooper

  5. 现在,就要对文件的批操作,动刀子啦!!!

  6. Python数据系列(一)- 列表List:Python的“苦力”

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

钱多多先森

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

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

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

打赏作者

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

抵扣说明:

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

余额充值