写给小白的Python之009:数据类型之字典

导读:

1.字典

字典(dictionary)是Python中另一个非常有用的内置数据类型。 在其他语言中也称为 map。字典是一种映射类型(mapping type),它是一个无序的键 : 值对集合。关键字必须使用不可变类型,也就是说list和包含可变类型的tuple不能做关键字。在同一个字典中,关键字还必须互不相同。
字典是一个无序的数据集合,使用print函数输出字典时,通常输出的顺序和定义的顺序是不一致的!

>>> dic = {} # 创建空字典
>>> tel = {'Jack':1557, 'Tom':1320, 'Rose':1886}
>>> tel
{'Tom': 1320, 'Jack': 1557, 'Rose': 1886}

1.取值

>>> tel['Jack'] # 主要的操作: 通过key查询,若不存在则报错1557

在我们不确定字典中是否存在某个键而又想获取其值时,可以使用get方法,还可以设置默认值:

>>> age = info.get('age')
>>> age #'age'键不存在,所以age为None
>>> type(age)
<type 'NoneType'>
>>> age = info.get('age', 18) # 若info中不存在'age'这个键,就返回默认值18
>>> age
18

2.增加/修改

>>> tel['Mary'] = 4127 # 若key不存在,则新增键值对;如存在,则修改键值对

3.删除

>>> tel.pop("Rose") # 删除一个键值对,若key不存在则报错.推荐使用
>>> del tel['Rose'] # 删除一个键值对

4.清空字典

>>> tel.clear()
>>> del tel[[key]]. # 删除指定的元素或删除整个字典

5.合并字典

>>> ful = {"hary": 3452,
"leo": 4237}
# 注意:如果被合并的字典中包含已经存在的键值对,会覆盖原有的键值对
>>> tel.update(ful)

6.字典.keys()方法

返回一个包含字典所有KEY的列表.

>>> tel
{'Tom': 1320, 'Jack': 1557, 'Mary': 4127}
>>> list(tel.keys()) # 返回所有key组成的list
['Tom', 'Jack', 'Mary']
>>> sorted(tel.keys()) # 按key排序
['Jack', 'Mary', 'Tom']

7.字典.values()

返回一个包含字典所有value的列表.

>>> tel.values()
[1320, 1557, 4127]

8.字典.items()

返回一个包含所有(键,值)元组的列表。

>>> tel.items()
[('Tom', 1320), ('Jack', 1557), ('Mary', 4127)]

9.len()

测量字典中,键值对的个数

>>>len(tel)
3

10.字典.has_key()(Python3 已取消)

dict.has_key(key)如果key在字典中,返回True,否则返回False。

>>> tel.has_key('Jack')
True

11.成员测试

>>> 'Tom' in tel # 成员测试
True
>>> 'Mary' not in tel # 成员测试
False

12.字典遍历

dict = {"name": "小明",
    "qq": "123456",
    "phone": "10086"}
# 迭代遍历字典
# 变量k是每一次循环中,获取到的键值对的key
for k in dict:
print("%s - %s" % (k, dict[k]))

提示:在实际开发中,由于字典中每一个键值对保存数据的类型是不同的,所以针对字典的循环遍历需求并不是很多。
<1> 遍历字典的key(键)

<2> 遍历字典的value(值)

 

<3> 遍历字典的项(元素)

 

<4> 遍历字典的key-value(键值对)

 

13.构造函数dict()

构造函数 dict() 直接从键值对sequence中构建字典,当然也可以进行推导,如下:

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'jack': 4098, 'sape': 4139, 'guido': 4127}
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}
>>> dict(sape=4139, guido=4127, jack=4098)
{'jack': 4098, 'sape': 4139, 'guido': 4127}

14.应用场景

尽管可以使用 for in 遍历字典,但是在开发中,更多的应用场景是:使用 多个键值对,存储 描述一个 物体 的相关信息 —— 描述更复杂的数据信息;
将 多个字典 放在 一个列表 中,再进行遍历,在循环体内部针对每一个字典进行 相同的处理。

card_list = [
    {"name": "张三",
    "qq": "12345",
    "phone": "110"},
    {"name": "李四",
    "qq": "54321",
    "phone": "10086"}
]
for card_info in card_list:
    print(card_info)

输出:
{'name': '张三', 'qq': '12345', 'phone': '110'}
{'name': '李四', 'qq': '54321', 'phone': '10086'}

15. 和 list 比较, dict 有以下几个特点:

1. 查找和插入的速度极快,不会随着 key 的增加而增加;
2. 需要占用大量的内存,内存浪费多。
而 list 相反:
1. 查找和插入的时间随着元素的增加而增加;
2. 占用空间小,浪费内存很少


要点:

1、字典是一种映射类型,它的元素是键值对。
2、字典的关键字必须为不可变类型,且不能重复。
3、创建空字典使用{ }。



原文地址:https://www.cnblogs.com/salmond/p/8776709.html