目录
- python中特殊数据类型应用(1)字典类型
- 字典类型定义
- 字典类型注意事项
- 字典类型的访问
python中特殊数据类型应用(1)字典类型
python作为最流行的几种开发语言之一,在数据类型上和传统的c、c++和java等有很大的不同,例如对Python中常见的Tuple(元组)、Dictionary(字典)和Set(集合)类型,都是其他语言中所没有的,本系列针对这些独有的数据类型的定义、应用和编程技巧进行一一阐述,方便从其他语言转型python的朋友有一个清晰的认识。
字典类型定义
字典类型是Python中非常重要的组合数据类型,字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:
语法:dictionary={key1:value1,key2:value2…},对应关系如下图:
在python源码中,对字典类型的定义如下:
typedef struct {
/* Cached hash code of me_key. */
Py_hash_t me_hash;
PyObject *me_key;
PyObject *me_value;
} PyDictKeyEntry;
可以看出来,这里多出来一个hash值,这个hash值是根据key运用内置函数hash()计算出来的,占用8字节(64位机器)。除了hash值,后面两个是指针,这两个指针分别是指向key和value的指针,也即是说对于64位机器各占用8字节,所以一个dict的元素,除了实际的数据占用的内存空间,还额外占用24字节的空间。
字典类型注意事项
(1)这些键值对之间没有先后顺序,或者说无法保证顺序。所以,遍历dict得到的元素结
果也是无序的
(2)字典中的键值对是“映射”关系的体现,键是值的数据索引。我们可以通过键来获得值。键一般是唯一的,如果重复最后的一个键值对会替换前面的,但是值并不需要唯一。
字典类型的访问
Python提供了很多字典类型的处理函数和方法,帮助我们使用和处理字典类型的变量,主要有:
del d[k] 删除字典d中键k所对应的键值对
k in d 如果键k在字典d中,那么返回True,否则返回False
d.keys() 返回字典d中的所有键
d.values() 返回字典d中的所有值
d.items() 返回字典d中的所有键值对
d.get(k,default) default参数可选, 返回字典d中键k对应的值,如果k不在字典d中,则返回default的值,如果default没有定义,则返回None
d.pop(k,default) default参数可选, 返回字典d中键k对应的值,并删除键k对应的字符串,如果k不在字典d中,则返回default的值,如果default没有定义,则返回None
d.popitem() 随机从字典d中返回一个键值对,之后删除该键值对
d.clear() 删除字典d中的所有键值对
len(d) 返回字典d中键值对的个数
下面举几个例子说明:
首先定义字典student如下:
student= {"id": 1, "name": "张三","sex":"male", "address": "beijing"}
执行:
print("student的值为 %s" % student)
返回:
student的值为 {'id': 1, 'name': '张三', 'sex': 'male', 'address': 'beijing'}
执行:
print("student的值为 %s" % student['id'])
返回:
student的值为 1
执行:
print("student的长度为 %s" % len(student))
返回:
student的长度为 4
执行:
print("student的key为 %s" % student.keys())
返回:
student的key为 dict_keys(['id', 'name', 'sex', 'address'])
还可以通过键值对的key获取value对应的值,例如:执行
print("student中id的值为 %s" % student.get('id'))
返回为:
student中id的值为 1
除了对字典类型的查询为,我们也可以修改键值对应的value,例如执行:
student['address'] = 'shanghai'
print(student)
返回为:
{'id': 1, 'name': '张三', 'sex': 'male', 'address': 'shanghai'}
可以看出,address对应的键值已经从‘beijing’更新为‘shanghai’了。
另外,如果那个键值对不需要了,我们眼看着直接删除对应的字典元素,甚至清空字典,如下为方法:
del student['name'] # 删除键是'Name'的条目
student.clear() # 清空字典所有条目
del student # 删除字典
至此,字典类型的操作方法基本就介绍完了,如有不当之处,欢迎各位沟通探讨沟通,共同提高。