Python学习笔记2:字典
概述
除了列表,Python中最常用的内建容器就是字典了,这是一种无序的键值对形式的对象集合。
这其中包含三层含义:
-
无序,即你不应该对字典数据的访问顺序抱有期待,其真是的访问顺序完全由Python解释器决定。
-
键值对,这在其它编程语言中也叫做关系数组或者散列,其运用在实际开发中相当普遍,像
json
或者XML
格式的数据都通常会用这种数据结构来处理。 -
对象集合,这意味着和列表一样,可以包含任何形式的数据。
需要注意的是字典中的键是具有唯一性的。当然,如果值一般,字典的键也是对象,其是否唯一的判断逻辑取决于对象对
==
运算符的重载处理,这在后续深入理解部分会提到。
创建
在代码中创建字典很简单,如果你熟悉json
数据的处理的话会颇为顺手:
a = {"name": "jack chen", "age": 16}
如果你追求可读性更强的写法,可以这样:
a = {"name": "jack chen",
"age": 16}
增删改查
与其它编程语言中的关系数组操作类似,Python中的字典操作同样很简单:
追加一个元素:
a = {"name": "jack chen",
"age": 16}
a["career"] = "actor"
print(a)
{'name': 'jack chen', 'age': 16, 'career': 'actor'}
a = {"name": "jack chen",
"age": 16}
a["career"] = "actor"
del a["age"]
print(a)
{'name': 'jack chen', 'career': 'actor'}
修改与追加写法一致,不再赘述,访问元素同理。
遍历
对队列,我们可以用for/in
的方式进行遍历,对字典同样可以:
a = {"name": "jack chen",
"age": 16}
a["career"] = "actor"
for column in a:
print(column)
name
age
career
可以看到,用for/in
的形式仅仅取到了key(键),而非value(值)。当然,我们可以进一步在循环体内通过a[column]
的形式获取value,但这并不方便。
我们看下在PHP中类似的关联数组是怎么遍历的:
<?PHP
$a = array(
"name" => "jack chen",
"age" => 16,
"career" => "actor"
);
foreach ($a as $key => $value) {
# code...
echo $key . ": " . $value . "\r\n";
}
name: jack chen
age: 16
career: actor
在Python中是不是可以这样呢?答案是肯定的,不过写法并不像PHP中那样直观:
a = {"name": "jack chen",
"age": 16,
"career": "actor"}
for key, val in a.items():
print(key, ": ", val)
name : jack chen
age : 16
career : actor
如果上边展示的那样,通过调用.items()
可以获得一个包括key和val的可遍历对象,然后就可以在for
中指定key
和val
。
排序
如前面所说,字典是个无序容器,所以不能对它的访问顺序有所期待,但有时候我们又需要顺序访问,怎么做?
对key进行排序
Python提供内置的排序方法sorted
,可以通过它或许一个有序的字典拷贝,通过这个拷贝我们就可以进行顺序读取:
a = {"name": "jack chen",
"age": 16,
"career": "actor"}
for key, val in sorted(a.items()):
print(key, ": ", val)
age : 16
career : actor
name : jack chen
自定义访问顺序
我们可以借助其它容器控制对字典进行有序访问:
a = {"name": "jack chen",
"age": 16,
"career": "actor"}
aSort = ["name", "career", "age"]
for key in aSort:
print(key, ": ", a[key])
name : jack chen
career : actor
age : 16
setdefault
在对字典这种数据结构日常使用过程中,我们经常会遇到以下这种情形:
a = list("Hellow World!")
count = {}
for char in a:
if not char in count:
count[char] = 0
count[char] += 1
print(count)
{'H': 1, 'e': 1, 'l': 3, 'o': 2, 'w': 1, ' ': 1, 'W': 1, 'r': 1, 'd': 1, '!': 1}
这是一个对字符串进行词频统计的程序,其中在用字典统计词频的时候,需要对其动态初始化,即如果没有相应的key就设置并初始化为0,如果不进行这一步,直接自增统计,就会报错。
这样做并没有问题,而Python对这种情况提供一种更方便的写法:
a = list("Hellow World!")
count = {}
for char in a:
count.setdefault(char, 0)
count[char] += 1
print(count)
这两种写法完全等效。
本来是要把元组和集合也放在这篇里介绍的,不过因为为了对比PHP的代码,去搭了一个PHP的开发环境,折腾了好长时间,就分开发吧。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。