Python列表、集合与字典(3)
一、列表
1. 列表初识
列表的使用为处理特定顺序排列的数据提供了便利,列表元素可以是字母、数字或者其他信息,同时所加元素之间不存在任何关系。
在Python中,用方括号表示列表,并用逗号分隔各个元素,具体如下所示:
names = ['ZhangYi','SuQin','SunBin','PangJuan','LvBu']
nums = [1,2,3,4,5]
上行代码定义了一个names和nums的列表,列表长度(即列表包含元素数量)均为5个,其中names元素以字符形式(str型)表示,nums元素以数字形式(int型)表示。
2.列表访问
列表通过index访问,即通过列表下表访问列表元素,需要注意的是Python列表index和C语言一样,都是从0开始而非1开始。
# 输出列表元素和相应元素的下标
names = ['ZhangYi','SuQin','SunBin','PangJuan','LvBu']
print(names[0])
print(names.index('ZhangYi'))
>>> ZhangYi
>>> 0
3.列表操作
&emsp实际使用中,创建列表是动态的,即我们依据需要对列表进行添加、修改、删除等一系列操作,这样将导致列表发生变化,下面将介绍列表主要的属性或方法的操作。
names = ['ZhangYi','SuQin','SunBin','PangJuan','LvBu']
# 列表元素修改
names[0] = 'GuanYu'
print('1:\t',names)
>>> 1: ['GuanYu','SuQin','SunBin','PangJuan','LvBu']
# 列表元素增添
names.append('BaiQi')
print('2:\t',names)
>>> 2: ['GuanYu', 'SuQin', 'SunBin', 'PangJuan', 'LvBu', 'BaiQi']
# 列表元素删除(remove del pop)
names.remove('SunBin')
print('3:\t',names)
>>> 3: ['GuanYu', 'SuQin', 'PangJuan', 'LvBu', 'BaiQi']
del names[1]
print('4:\t',names)
>>> 4: ['GuanYu', 'PangJuan', 'LvBu', 'BaiQi']
names.pop(1)
print('\t',names.pop(1)) # 假如未指定下标,则默认删除列表最后一个元素
print('5:\t',names)
>>> 'PangJuan'
>>> 5: ['GuanYu', 'LvBu', 'BaiQi']
names = ['ZhangYi','SuQin','SunBin','PangJuan','LvBu','ZhangYi']
# 列表元素下标
print('\t',names.index('ZhangYi'))
print('6:\t',names[names.index('ZhangYi')])
>>> 0
>>> 6: ZhangYi
# 列表元素统计
print('7:\t',names.count('ZhangYi'))
>>> 7: 2
# 列表元素反转
names.reverse()
print('8:\t',names)
>>> 8: ['ZhangYi', 'LvBu', 'PangJuan', 'SunBin', 'SuQin', 'ZhangYi']
# 列表元素排序
# 排序顺序:特殊字符->数字->字母->汉字
char_ = ['#','12','Hello','$','54','霓虹','飞天']
char_.sort()
print('9:\t',char_)
>>> 9: ['#', '$', '12', '54', 'Hello', '霓虹', '飞天']
# 列表元素扩展
names.extend(char_)
print('10:\t',names)
print('11:"\t',names+char_)
>>> 10: ['ZhangYi', 'LvBu', 'PangJuan', 'SunBin', 'SuQin', 'ZhangYi', '#', '$', '12', '54', 'Hello', '霓虹', '飞天']
>>> 11: ['ZhangYi', 'LvBu', 'PangJuan', 'SunBin', 'SuQin', 'ZhangYi', '#', '$', '12', '54', 'Hello', '霓虹', '飞天']
# 列表元素插入
names = ['ZhangYi','SuQin','SunBin','PangJuan','LvBu']
names.insert(6,'ZhaoYun')
print('12:\t',names)
>>> 12: ['ZhangYi', 'SuQin', 'SunBin', 'PangJuan', 'LvBu', 'ZhaoYun']
names = ['ZhangYi','SuQin','SunBin','PangJuan','LvBu']
char_ = ['#','12','Hello','$','54','霓虹','飞天']
names.insert(6,char_)
print('13:\t',names)
>>> 13: ['ZhangYi', 'SuQin', 'SunBin', 'PangJuan', 'LvBu', ['#', '12', 'Hello', '$', '54', '霓虹', '飞天']]
# 列表元素清空
names.clear()
print('14:\t',names)
>>> 14: []
以上是关于列表元素的主要操作,并给出了相应的运算结果,此处只列举常用的列表属性或方法(除copy属性外),其他的在此不再过多介绍。
下面单独进行列表copy属性的介绍,此处涉及可能有些繁琐,所以大家运行代码时请注意区分相应的元素变化。
首先是进行基本复制的介绍:
# copy()方法复制
names = ['ZhangYi','SuQin','SunBin','PangJuan','LvBu']
print(names.copy())
>>> ['ZhangYi', 'SuQin', 'SunBin', 'PangJuan', 'LvBu']
# 数量复制
print(names*5)
>>> ['ZhangYi', 'SuQin', 'SunBin', 'PangJuan', 'LvBu', 'ZhangYi', 'SuQin', 'SunBin', 'PangJuan', 'LvBu']
接下来重点介绍下列表复制中的浅复制和深复制:
# 导入copy模块
import copy
str_c = ['ZhangFei','SunBin','PangTong',['孙膑','庞涓'],'LiBai']
print('orig:\t',str_c)
>>> orig: ['ZhangFei', 'SunBin', 'PangTong', ['孙膑', '庞涓'], 'LiBai']
# 以下orig简称为原本,copy版本简称为复制本
# 使用.copy()方法
# (1) 浅层(外层)列表原本元素修改,观察复制本中相应元素
str_c_1 = copy.copy(str_c)
str_c[1] = '孙膑'
print('cp_1:\t',str_c_1)
print('orig:\t',str_c)
>>> cp_1: ['ZhangFei', 'SunBin', 'PangTong', ['孙膑', '庞涓'], 'LiBai']
>>> orig: ['ZhangFei', '孙膑', 'PangTong', ['孙膑', '庞涓'], 'LiBai']
# ***********************************************************************
# (1) 原本浅层列表元素变化后,复制本并未产生变化!相应修改复制本中的元素,相应原本中的元素也不会发生变化(此处不再验证,有兴趣可以自行验证)
# ***********************************************************************
# 接续上次运行结果进行元素修改
# 使用.copy()方法
# (2) 深层(嵌套层)列表复制本元素修改,观察原本中相应元素
str_c_1[3][0] = 'SunBin'
print('cp_1:\t',str_c_1)
print('orig:\t',str_c)
>>> cp_1: ['ZhangFei', 'SunBin', 'PangTong', ['SunBin', '庞涓'], 'LiBai']
>>> orig: ['ZhangFei', '孙膑', 'PangTong', ['SunBin', '庞涓'], 'LiBai']
# ***********************************************************************
# (2) 复制本深层列表元素变化后,原本相应元素也产生变化!相应修改原本中的元素,相应复制本中的元素也不会发生变化(此处不再验证,有兴趣可以自行验证)
# ***********************************************************************
# 接续上次运行结果进行元素修改
# 使用.deepcopy()方法
# (3) 浅层(外层)列表原本元素修改,观察复制本中相应元素
str_c_2 = copy.deepcopy(str_c)
str_c[1] = 'SunBin'
print('cp_2:\t',str_c_2)
print('orig:\t',str_c)
>>> cp_2: ['ZhangFei', '孙膑', 'PangTong', ['SunBin', '庞涓'], 'LiBai']
>>> orig: ['ZhangFei', 'SunBin', 'PangTong', ['SunBin', '庞涓'], 'LiBai']
# ***********************************************************************
# (3) 原本浅层列表元素变化后,复制本相应元素未产生变化!相应修改复制本中的元素,相应原本中的元素也不会发生变化(此处不再验证,有兴趣可以自行验证)
# ***********************************************************************
# 接续上次运行结果进行元素修改
# 使用.deepcopy()方法
# (4) 深层(嵌套层)列表复制本元素修改,观察原本中相应元素
str_c_2[3][0] = '孙膑'
print('cp_2:\t',str_c_2)
print('orig:\t',str_c)
>>> cp_2: ['ZhangFei', '孙膑', 'PangTong', ['孙膑', '庞涓'], 'LiBai']
>>> orig: ['ZhangFei', 'SunBin', 'PangTong', ['SunBin', '庞涓'], 'LiBai']
# ***********************************************************************
# (4) 复制本深层列表元素变化后,原本相应元素未产生变化!相应修改原本本中的元素,相应复制本中的元素也不会发生变化(此处不再验证,有兴趣可以自行验证)
# ***********************************************************************
在复制过程中存在浅复制(shallow copy)和深复制(deepcopy),这两种复制的区别主要体现在对列表深层结构的复制,在浅层复制上两者相同。通过上述试验,我们能够具体总结出:
- 当原本只存在一层结构(浅层结构)时,两种复制方法不存在什么差别,即不论复制本变化还是原本变化,都不影响对方内容;
- 当原本具有嵌套结构(深层结构)时,在浅层结构复制上,两种复制方法变化机制和单一结构复制时的情况相同;
- 当进行原本深层结构复制时,利用浅复制时,无论原本或时复制本哪一方发生变化,对方对应的元素都将产生同样的更改,而利用深复制时,在深层结构元素变化后,例如原本发生变化,则复制本相应元素不变化,相应的复制本变化,原本相应元素不变化。
浅复制主要由以下集中形式,同时需要注意的是,利用浅复制和深复制时,需导入copy模块:
import copy
a = copy.copy(b)
a = b[:]
a = list(b)
列表除了上述方法和属性外,还有一项很重要的内容就是切片功能,利用列表切片可能很方便的控制元素的输出。
names = ['ZhangYi','SuQin','SunBin','PangJuan','LvBu']
print('1:\t',names)
>>> 1: ['ZhangYi', 'SuQin', 'SunBin', 'PangJuan', 'LvBu']
print('2:\t',names[1:4]) # names[1-3]
>>> 2: ['SuQin', 'SunBin', 'PangJuan']
print('3:\t',names[-1]) # names[4]
>>> 3: LvBu
print('4:\t',names[-1:-3]) # names[]
>>> 4: []
print('5:\t',names[-3:-1]) # names[2-3]
>>> 5: ['SunBin', 'PangJuan']
print('6:\t',names[-2:-1]) # names[3]
>>> 6: ['PangJuan']
print('7:\t',names[-1:]) # names[4]
>>> 7: ['LvBu']
print('8:\t',names[-1:0]) # names[]
>>> 8: []
print('9:\t',names[:3]) # names[0-2]
>>> 9: ['ZhangYi', 'SuQin', 'SunBin']
print('10\t',names[0:-1]) # names[0-3]
>>> 10: ['ZhangYi', 'SuQin', 'SunBin', 'PangJuan']
print('11:\t',names[0:-1:2]) # names[0,2]
>>> 11: ['ZhangYi', 'SunBin']
print('12:\t',names[::2]) # names[0,2,4]
>>> 12: ['ZhangYi', 'SunBin', 'LvBu']
print('13:\t',names[:]) # names[0-4]
>>> 13: ['ZhangYi', 'SuQin', 'SunBin', 'PangJuan', 'LvBu']
上述对列表的主要用法都进行了介绍,主要归结有以下规律:
- names[a:c:i] —— 对于列表names,在切片处理中,a表示切片元素起始下标,c为切片元素终止下标,i为切片切取步长,切取顺序按照 names[a], names[a+i], names[a+2*i]……进行,其中names[c]为检索的最大上限,即边界,可以用集合中的开区间概念理解,即无法取到,只能取到names[c]之前的元素,另外 i 不写情况下,默认取1。
- names[-1] —— 表示列表names列表的最后一个元素,相对应的names[-2]表示倒数第二个元素。
- names[:]——表示列表中的所有元素。
4.列表的循环
上述操作主要针对列表元素进行处理专项处理,当列表元素数量较多,且需要对每个元素进行同质化操作时,列表所有元素挨个处理就显得本笨拙了,因此列表循环在此刻就显得十分有用。
在使用过程中过程中,有两种循环方式用的比较常见:
names = ['ZhangYi','SuQin','SunBin','PangJuan','LvBu']
# 列表items循环,即列表元素循环
for name in names:
print(name)
>>> ZhangYi
SuQin
SunBin
PangJuan
LvBu
# 列表index循环,即列表下标循环
for index in range(len(names)):
print(names[index])
>>> ZhangYi
SuQin
SunBin
PangJuan
LvBu
以上主要是针对浅层列表的循环继续讲解,至于深层列表,可以利用循环嵌套进行处理,在此不再多做赘述。另外再介绍下enumerate,它能够同时返回列表元素的index和items,方便循环处理:
names = ['ZhangYi','SuQin','SunBin','PangJuan','LvBu']
for index,items in enumerate(names):
print(index,items)
>>> 0 ZhangYi
1 SuQin
2 SunBin
3 PangJuan
4 LvBu
列表主要内容基本就是上述这些,最后再讲解点元组(tuple)类型,元组类型形式很简单,就是元组元素用小括号括起来,与列表相比,元组只能进行元素下标和元素计数两种方法的处理,其他方法对元组元素不适用,因为元组与列表不同,一旦创建便不可更改。
names = ('ZhangFei','MaChao','GuanYu','ZhangFei')
# 元组元素循环
for name in names:
print(name)
>>> ZhangFei
MaChao
GuanYu
ZhangFei
# 元组列表循环
for i in range(len(names)):
print(names[i])
>>> ZhangFei
MaChao
GuanYu
ZhangFei
# 元组元素计数
print(names.count('ZhangFei'))
>>> 2
二、集合
1.集合初识
Python中的集合在意义上同数学上的集合意义相同,即集合元素具有唯一性,无序性。在Python中,集合定义不像 tuple()、list[]、dict{} 可以直接通过括号进行定类,在定义集合类型时可以利用函数 set() 进行定义,而集合输出时则以大括号进行表示,具体如下所示:
set_0 = set('Hello')
set_1 = set(['Hello'])
set_2 = set({'Hello'})
print('0:\t{}\n{}\n{}'.format(set_0,set_1,set_2))
>>> 0: {'l', 'H', 'e', 'o'}
{'Hello'}
{'Hello'}
set_3 = set(['1','2','3','4'])
set_4 = set({'1','2','3','4'})
print('1:\t{}\n{}'.format(set_3,set_4))
>>> 1: {'2', '3', '1', '4'}
{'2', '3', '1', '4'}
通过上述代码可以看出,利用集合表示字符串时:
- 使用小括号表示单个字符串时,集合将以每个字符作为集合元素表示;
- 使用中括号和大括号表示单个字符串时,集合将以整个字符串作为一个元素表示;
- 表示多个元素时,必须使用中括号或者大括号表示;
2.集合访问
集合不能像元组、列表那些可以通过指定下标访问元素,因此集合访问元素只能通过对元素进行遍历:
set_ = set(['1','2','3','4'])
for index,items in enumerate(set_):
print(index,'*'+items+'*')
>>> 0 *1*
1 *3*
2 *2*
3 *4*
3.集合操作
数学意义上的集合有许多关系,在Python中,可以利用一些函数或者关系将这些关系表示出来:
# 交集
list_1 = set([1,2,3,4,5])
list_2 = set([1,2,8,9,12])
list_3 = set([1,2])
print('1:\t',list_1.intersection(list_2))
>>> 1: {1, 2}
print('2:\t',list_1.intersection(list_3))
>>> 2: {1, 2}
print('3:\t',list_1 & list_3)
>>> 3: {1, 2}
# 并集
print('4:\t',list_1.union(list_3))
>>> 4: {1, 2, 3, 4, 5}
print('5:\t',list_1 | list_3)
>>> 5: {1, 2, 3, 4, 5}
# 差集
print('6:\t',list_1.difference(list_3))
>>> 6: {3, 4, 5}
print('7:\t',list_1 - list_3)
>>> 7: {3, 4, 5}
# 子集
print('8:\t',list_1.issubset(list_2))
>>> 8: False
print('9:\t',list_3.issubset(list_1))
>>> 9: True
# 父集
print('10:\t',list_1.issuperset(list_2))
>>> 10: False
print('11:\t',list_1.issuperset(list_3))
>>> 11: True
# 子父集符号判断
print('12:\t',list_3 in list_1)
>>> 12: False
print('13:\t',list_3 not in list_1)
>>> 13: True
print('14:\t',list_3 <= list_1)
>>> 14: True
print('15:\t',list_3 >= list_1)
>>> 15: False
# 对称差集
print('16:\t',list_1.symmetric_difference(list_3))
>>> 16: {3, 4, 5}
print('17:\t',list_1 ^ list_3)
>>> 17: {3, 4, 5}
# 判断交集
print('18:\t',list_1.isdisjoint(list_2))
>>> 18: False
集合的逻辑关系基本就是上述这些,除了上述关系外,集合还有一些常用的操作方法:
list_1 = set([1,2,3,4,5])
# 集合元素添加
# 单项添加
list_1.add(212)
print('1:\t',list_1)
>>> 1: {1, 2, 3, 4, 5, 212}
# 多项添加
list_1.update([200,201,202])
print('2:\t',list_1)
>>> 2: {1, 2, 3, 4, 5, 200, 201, 202, 212}
# 集合元素删除
list_1.remove(212)
print('3:\t',list_1)
>>> 3: {1, 2, 3, 4, 5, 200, 201, 202}
list_1.pop()
print('4:\t',list_1)
>>> 4: {2, 3, 4, 5, 200, 201, 202}
# discard()删除时假如集合中没有该元素,不报错,返回None,
# 假如存在,则删除,相对应的,remove则在没有该元素时,会报错
list_1.discard(5)
print('5:\t',list_1)
>>> 5: {2, 3, 4, 200, 201, 202}
# 集合长度
print('6:\t',len(list_1))
>>> 6: 6
三、字典
1.字典初识
Python中,字典就是一系列的键-值对。每个键与一个值相关联,通过键的使用可以访问该键所对应的值,而值可以是Python中的任何对象,如数字、字符串、列表甚至是字典等。
MaChao = {'Country':'Shu','Gender':'Male'}
如上所示,Python字典使用{ }包含元素,即字典一系列键-值对就放在字典打括号内,键和值使用冒号分隔,而键-值对之间使用都好分隔,字典内能够存储无限个键-值对。
2.字典访问
字典和列表两种结构间共有着一种一一对应关系,即列表每个下标对应相应的元素,而字典通过键对应对应相应的值,列表通过下标访问元素,字典则需要利用值所对应的键进行访问。
info = {
'Shu':'ZhaoYun',
'Wu':['LuXun','TaiShici'],
'Wei':'DianWei'
}
print(info['Wu'])
print(info['Shu'])
>>> ['LuXun', 'TaiShici']
>>> ZhaoYun
3.字典操作
字典的值操作也很简单,找到所需修改值所对应的键,然后进行查找即可操作。
# 字典元素替换
info = {
'Shu':'ZhaoYun',
'Wu':['LuXun','TaiShici'],
'Wei':'DianWei'
}
info['Shu'] = 'GuanYu'
print(info)
>>> {'Shu': 'GuanYu', 'Wu': ['LuXun', 'TaiShici'], 'Wei': 'DianWei'}
# 字典元素删除
del info['Wei']
print('del:\t',info)
info.pop('Shu')
print('pop:\t',info)
>>> del: {'Shu': 'GuanYu', 'Wu': ['LuXun', 'TaiShici']}
>>> pop: {'Wu': ['LuXun', 'TaiShici']}
# popitem()随机返回并删除字典中的一堆键—值
info = {
'Shu':'ZhaoYun',
'Wu':['LuXun','TaiShici'],
'Wei':'DianWei'
}
info_pop = info.popitem()
print('\t',info_pop)
print('popitem:\t',info)
>>> ('Wei', 'DianWei')
popitem: {'Shu': 'GuanYu', 'Wu': ['LuXun', 'TaiShici']}
# 字典元素查找
info = {
'Shu':'ZhaoYun',
'Wu':['LuXun','TaiShici'],
'Wei':'DianWei'
}
print(info.get('Shu'))
print('Shu' in info) # info.has_key('Shu') in py2.x
>>> ZhaoYun
True
# 字典元素更新-update()
# 字典更新时,假如新字典中有和原字典相同的键,则
# 新字典中该键的内容将完全替代原字典中该键所对应的值
# 假如没有相同的键,则直接在原字典后进行新的添加
b = {
'Shu':'GuanYu',
'Song':'LiuYu'
}
info.update(b)
print(info)
print(info.items())
>>> {'Shu': 'GuanYu', 'Wu': ['LuXun', 'TaiShici'], 'Wei': 'DianWei', 'Song': 'LiuYu'}
dict_items([('Shu', 'GuanYu'), ('Wu', ['LuXun', 'TaiShici']), ('Wei', 'DianWei'), ('Song', 'LiuYu')])
# 字典元素更新-setdefault()
# setdefault()假如查找在字典里查找到,则返回查找到的值,
# 假如没有则创建新值,新值信息是setdefault()后面的信息
infos = {
'三国':
{'Shu':['ZhaoYun','GuanYu'],
'Wu':['LuXun','TaiShici'],
'Wei':['DianWei','ZhangHe']
},
'西晋':{
'Sima':['SimaZhao','SimaYan']
},
'东晋':{
'Xie':['Xiean','Xiexuan']
}
}
infos['东晋']['Xie'][0] = '谢安'
print(infos)
>>> {'三国': {'Shu': ['ZhaoYun', 'GuanYu'], 'Wu': ['LuXun', 'TaiShici'], 'Wei': ['DianWei', 'ZhangHe']}, '西晋': {'Sima': ['SimaZhao', 'SimaYan']}, '东晋': {'Xie': ['谢安', 'Xiexuan']}}
infos.setdefault('东晋',{'Wang':['WangDao','WangRong']})
>>> {'Xie': ['Xiean', 'Xiexuan']}
infos.setdefault('宋朝',{'Liu':['LiuYu']})
>>> {'Liu': ['LiuYu']}
print(infos)
>>> {'三国': {'Shu': ['ZhaoYun', 'GuanYu'], 'Wu': ['LuXun', 'TaiShici'], 'Wei': ['DianWei', 'ZhangHe']}, '西晋': {'Sima': ['SimaZhao','SimaYan']}, '东晋': {'Xie': ['Xiean', 'Xiexuan']}, '宋朝': {'Liu': ['LiuYu']}}
# 字典元素更新-fromkeys()
# fromkeys()在每个键(前面参数中的每个元素都是一个独立的键)
# 后面都添加后面参数内的全部元素作为值,假如修改其中的一个值,
# 则字典中同样位置的元素都将发生改变
ele = dict.fromkeys([6,7,8],[1,{'Shu':'ZhangFei'},4])
print(ele)
>>> {6: [1, {'Shu': 'ZhangFei'}, 4], 7: [1, {'Shu': 'ZhangFei'}, 4], 8: [1, {'Shu': 'ZhangFei'}, 4]}
ele[7][1]['Shu'] = 'HuangZhong'
print(ele)
>>> {6: [1, {'Shu': 'HuangZhong'}, 4], 7: [1, {'Shu': 'HuangZhong'}, 4], 8: [1, {'Shu': 'HuangZhong'}, 4]}
4.字典循环
字典结构相对来说比较复杂,因此在遍历时,会和其他结构稍微有些不同。
(1)遍历字典中的所有的键-值对
遍历键值对的遍历有两种方法,一种是常规的遍历,另一种时运用字典特定的属性方法遍历:
info = {
'Shu':'ZhaoYun',
'Wu':['LuXun','TaiShici'],
'Wei':'DianWei'
}
# 常规遍历方法
for i in info:
print(i + ':\t',info[i])
>>> Shu: ZhaoYun
Wu: ['LuXun', 'TaiShici']
Wei: DianWei
# itmes()遍历
for key,value in info.items():
print(key + ':\t',value)
>>> Shu: ZhaoYun
Wu: ['LuXun', 'TaiShici']
Wei: DianWei
需要注意的是,当数据量较小时,应用上述两种方法都行,但是当数据量比较大时,使用items()会比较耗费CPU,而相比之下,第一种常规的遍历方法更适合处理数量比较大时的情况。
(2)遍历字典中的键/值
前面有了对整个键-值对的遍历,再对键进行遍历就比较容易了:
info = {
'Shu':'ZhaoYun',
'Wu':['LuXun','TaiShici'],
'Wei':'DianWei'
}
# 遍历字典中的键
for key in info.keys():
print(key)
>>> Shu
Wu
Wei
# 遍历字典中的值
for value in info.values():
print(value)
>>> ZhaoYun
>>> ['LuXun', 'TaiShici']
>>> DianWei
(3)遍历字典中的所有值
最后对字典嵌套循环进行简要的介绍。
很多情况下,字典并不是如我们上述所写的这么简单,有时我们会遇到在字典中有多重嵌套的情况,而同时我们又需要将整个字典的所有值给打印出来,而面对多重嵌套,我们常常会抓耳挠腮,实际上,打印这些值,根本方法还是利用循环,下面将以一个两重嵌套的字典进行所有制的打印说明,之后再遇到更多重的嵌套,原理都是一样的,跳出代码,掌握核心观念,方可灵活运用。
infos = {
'三国':
{'蜀':['赵云','关羽'],
'吴':['陆逊','甘宁'],
'魏':['典韦','张郃']
},
'西晋':{'司马':['司马炎','司马昭']
},
'东晋':{
'谢':['谢安','谢玄']
}
}
# 以列表形式显示值
for info in infos:
for info_inner in infos[info]:
print(info_inner + ':\t',infos[info][info_inner])
>>> 蜀: ['赵云', '关羽']
吴: ['陆逊', '甘宁']
魏: ['典韦', '张郃']
司马: ['司马炎', '司马昭']
谢: ['谢安', '谢玄']
# 以单个元素显示值
for info in infos:
for info_inner in infos[info]:
info_show = infos[info][info_inner]
for i in range(len(info_show)):
print(info + '--' + info_inner + ':\t',info_show[i])
>>> 三国--蜀: 赵云
三国--蜀: 关羽
三国--吴: 陆逊
三国--吴: 甘宁
三国--魏: 典韦
三国--魏: 张郃
西晋--司马: 司马炎
西晋--司马: 司马昭
东晋--谢: 谢安
东晋--谢: 谢玄
Python列表、集合与字典(3)的更多相关文章
- Python—列表元组和字典
Python-列表元组和字典 列表 元组 字典 列表: 列表是Python中的一种数据结构,他可以存储不同类型的数据.尽量存储同一种类型 列表索引是从0开始的,我们可以通过索引来访问列表的值. 列表的 ...
- Python列表元组和字典解析式
目录 列表解析式List comprehensive 集合解析式Set comprehensive 字典解析式Dict comprehensive 总结 以下内容基于Python 3x 列表解析式Li ...
- [转载] Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...
- Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...
- 5--Python入门--Python数据集合类型--字典
列表list,最常用的数据类型,以[]为标识 元组tuple,和list很相似,但是不能二次赋值,用()标识 集合set,和list类似,但是set中没有重复的元素,常用于集合间的运算,用{}标识 字 ...
- python列表里的字典元素去重
去重 def list_dict_duplicate_removal(): data_list = [{"a": "123", "b": & ...
- 转:Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
转自:http://blog.csdn.net/business122/article/details/7536991 创建列表 sample_list = ['a',1,('a','b')] Pyt ...
- Python的集合与字典练习
集合与字典练习 question1 问题描述:有一个列表,其中包括 10 个元素,例如这个列表是[1,2,3,4,5,6,7,8,9,0],要求将列表中的每个元素一次向前移动一个位置,第一个元素到列表 ...
- Python列表中的字典按照该字典下的键值进行排序
列表中的字典按照该字典下的键值进行排序 这算是排序中比较复杂的一种情况吧,多重嵌套,按照某种规则进行排序.如下面这个json(注:这里这是该列表中的一个项): [ { "stat" ...
- Python成长笔记 - 基础篇 (三)python列表元组、字典、集合
本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 一.列表和元组的操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义 ...
随机推荐
- luogu1268 树的重量
题目大意 给出一棵树上每两个叶子节点之间的距离,求树的总边权和. 题解 定义节点a到b的简单路径长度为[a,b],树中节点c要到达路径[a,b]所要经过的距离为dist(c, [a,b]),在树中,与 ...
- Linux 中的键盘映射【转】
本文转载自:http://hessian.cn/p/144.html [转]Linux 中的键盘映射 原文地址:http://www.linuxidc.com/Linux/2011-04/35197. ...
- C++中的inline的用法
C++中的inline的用法 参考:http://www.cnblogs.com/fnlingnzb-learner/p/6423917.html 1. 引入inline关键字的原因 在c/c++中 ...
- css中的绝对定位和相对定位(详解,总结)
css中的绝对定位和相对定位(详解,总结) 总结: 设置绝对定位或者相对定位后都从文档中浮起来了,区别是相对定位还占着原来的位置,绝对定位不占着原来的位置,可以种z-index来改变元素的浮动的堆叠次 ...
- POJ 2976(01分数划分+二分)
Droppi ...
- B1041 [HAOI2008]圆上的整点 数学
这个题一开始看着没什么思路,但是一看题解就明白了不少,主要是数学证明,代码很好写. 贴个网址: hzwer 题干: 题目描述 求一个给定的圆(x^+y^=r^),在圆周上有多少个点的坐标是整数. 输入 ...
- E20170816-mk
deque 即双端队列.是一种具有队列和栈的性质的数据结构. revert vi. 恢复; 重提; 回到…上; <律>归还; n. 归属; 恢复原来信仰的人; Indicator ...
- 最短路径问题(floyd)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1867 #include<stdio.h& ...
- Jenkins上Git ssh登陆配置
1. 首先登陆linux机器 2. 切换到jenkins用户 3. 生成ssh key ssh-keygen -t rsa -C 'amysu@acxiom.com' 4. 将生成的ssh ke ...
- Laravel5.1 学习笔记2, 路由
安装的说明请看文档, laravel 安装 #基本路由 你将在 app/Http/routes.php 文件定义大部分路由, 这些路由将被App\Providers\RouteServiceProvi ...