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
在这个遍历字典d
的for
循环中,我们声明了两个变量i
,j
分别用来存储键-值对的键和值。在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}