字典

Python字典可以将相关的信息关联起来,字典中可存储的信息量几乎不受限制,而且查找速度极快。使用字典可以准确的模拟真实事物建模。

一个简单的字典

dict_1 = {'joecy':25,'yingying':24}
print(dict_1['joecy'])

输出:

25

在Python中,字典是由一系列键-值对(key-value)组成。并放在花括号{}中。每一个键与一个值相关联,可以使用键来访问与其对应的值。与键相关联的值可以是数字、字符串、列表甚至另一个字典。

之间使用冒号:分隔,键-值对之间使用逗号,分隔。

访问字典中的值

dict_1 = {'joecy':25,'yingying':24}
print(dict_1['joecy'])   #指定字典名,并在[]中指定键

添加键值对

要向字典中添加键-值对,可依次指定字典名、要添加的以及

dict_1 = {'joecy':25,'yingying':24}
dict_1['muyi'] = 2
print(dict_1)

输出:

{'joecy': 25, 'yingying': 24, 'muyi': 2}

一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值替换:

dict_1 = {'joecy':25,'yingying':24}
dict_1['muyi'] = 2
dict_1['muyi'] = '1周岁'
print(dict_1)

输出:

{'joecy': 25, 'yingying': 24, 'muyi': '1周岁'}

'muyi'的值被替换为了值'1周岁'键-值对的排列顺序与添加顺序不同,Python只关心之前的对应关系。

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

查找和插入的速度极快,不会随着key的增加而变慢; 需要占用大量的内存,内存浪费多。 而list相反:

查找和插入的时间随着元素的增加而增加; 占用空间小,浪费内存很少。 所以,dict是用空间来换取时间的一种方法。(来自廖雪峰博客)

创建空字典

当我们需要存储用户提供的信息或编写能够自动生成大量键-值对的代码时,需要事先定义一个空字典

d = {}
d['key1'] = '第一个值'
d['key2'] = '第二个值'
print(d)

输出:

{'key1': '第一个值', 'key2': '第二个值'}

修改字典中的值

alien_0 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'} 

print(" Original x-position: " + str( alien_0['x_position'])) # 向右移动外星人 # 据外星人当前速度决定将其移动多远 

if alien_0['speed'] == 'slow': 
	x_increment = 1 
elif alien_0['speed'] == 'medium': 
	x_increment = 2 
else: # 这个外星人的速度一定很快 
	x_increment = 3 # 新位置等于老位置加上增量 
	
alien_0['x_position'] = alien_0['x_position'] + x_increment 

print(" New x-position: " + str( alien_0['x_position']))

示例代码来源于《Python编程 从入门到实践》

删除键-值对

我们可以使用pop()方法或del语句删除键-值对

d = {'a':1,'b':2,'c':3}
del d['a']
print('字典d'\n)
print(d)

e = {'a':1,'b':2,'c':3}
e.pop('a')
print('字典e'\n)
print(e)

输出:

字典d

{'b': 2, 'c': 3}
字典e

{'b': 2, 'c': 3}

遍历字典

Python有多种遍历字典的方式:遍历字典的所有键-值对、``键或

遍历字典所有的键值对

d = {'a':1,'b':2,'c':3}
for i,j in d.items():
	print(i,j)

输出:

a 1
b 2
c 3

在这个遍历字典dfor循环中,我们声明了两个变量ij分别用来存储键-值对的键和值。在for循环的第二部分,我们对字典d使用了方法items(),它返回一个键-值对列表。最后for循环依次将每个键-值对存储到两个变量中。

即使遍历字典时,键-值对的返回顺序与存储顺序也不相同。

遍历字典中所有键

遍历字典中的键可以使用方法`keys()``。

d = {'a':1,'b':2,'c':3}
for i in d.keys():
	print(i)

输出:

a
b
c

其实遍历字典时,Python默认遍历所有的键,所以我们可以将keys()方法省略:

d = {'a':1,'b':2,'c':3}
for i in d:
	print(i)

输出:

a
b
c

结果并不会改变,但是显式的使用方法keys()可以时程序便于理解。

遍历字典中所有的值

d = {'a':1,'b':2,'c':3}
for i in d.values():
	print(i)

输出:

1
2
3

这种做法提取字典中的值,不会考虑重复问题,最终的列表(结果)可能包含大量重复项。剔除重复项可使用集合set集合set类似于列表,但其中的元素必须是独一无二的。

l = [1,1,2,2,3,3,4,4]
ll = set(l)
print(ll)

输出:

{1, 2, 3, 4}

嵌套

将字典存储在列表中,或将列表存储在字典中,称为嵌套

在列表中存储字典

d_1 = {'a':1,'b':2,'c':3}
d_2 = {'f':'joecy','g':'yy'}
l = [d_1,d_2]
for i in l:
    print(i)

输出:

{'a': 1, 'b': 2, 'c': 3}
{'f': 'joecy', 'g': 'yy'}

在字典中存储列表

d = {'a':1,'b':[1,2,3]}

在字典中存储字典

d = {'dind':{'a':1,'b':2},'c':3}