文章目录
- python学习记录
- 字典
- 遍历键-值对
- 遍历所有的键
- 嵌套
- 字典列表
- 在字典中存储列表
- 在字典中存储字典
- 删除字典
- 字典的特性
- 感谢观看
python学习记录
序言:笔者并未从python最基础开始记录学习历程,是因为在此之前就已经学习了一点点皮毛,所以在第一次在网上记录自己的学习过程便从后面的新知识开始。
字典
一个Python字典可能只包含几个键—值对,也可能包含数百万个键—值对。鉴于字典可能包含 大量的数据,Python支持对字典遍历。字典可用于以各种方式存储信息,因此有多种遍历字典的 方式:可遍历字典的所有键—值对、键或值。
遍历键-值对
the_famous_river={ 'the Yangtze River':'HuBei',
'the Huang River':'ShanXi',
'Nile':'Aswan'} #这个字典记录下了河流流经城市的信息
for river,city in the_famous_river.items():
print( "\n river:" + river )
print( "\n city" + city )
利用一个for循环遍历一遍字典中的键-值对,方法items()是返回一个键- 值对列表。
但是运行出的键-值对顺序可能不会像列表中展示的那样,即便遍历字典时,键—值对的返回顺序也与存储顺序不同。Python不关心键—值对的存 储顺序,而只跟踪键和值之间的关联关系。所以如果输出顺序不同,不要惊慌。
遍历所有的键
依然利用上面的具有包含河流流经城市信息的字典,如果我们想要只取出字典的键那么用方法keys()就可以做到。
for river in the_famous_river.keys():
print( river )
当然,用方法keys()只是为了更方便知道代码的意思,如果你愿意,也可以直接用the_famous_river,因为遍历字典时,是默认遍历所有的键,因此也可以这样:
for river in the_famous_river:
print( river )
这两种方式得到的结果一样样的。
嵌套
在学习python的时候应该可以感觉到列表和字典应该可以有某种联系,因为在输出字典的时候,我们通常把键作为一整个列表输出,又或是将值作为一整个列表输出,更可将键-值对作为一整个列表。
利用嵌套可以将列表嵌套在字典中,也可将字典嵌套在列表中,根据需要选择合适的嵌套将很有帮助。
字典列表
首先展示将字典嵌套在列表中,我们假设利用创造外星人的例子来写一段代码:
# 创建一个用于存储外星人的空列表
aliens = []
# 创建30个绿色的外星人
for alien_number in range(30):
new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
aliens.append(new_alien)
# 显示前五个外星人
for alien in aliens[:5]:
print(alien)
print("...(剩下的25个)")
# 显示创建了多少个外星人
print("Total number of aliens: " + str(len(aliens)))
其中,range()的功能不是重在创建数字列表,而是为了告诉for循环重复几次,创建多少个外星人、
每一轮for循环都会创建一个将外星人的属性包含在new_alien的字典,然后将这个字典添加到开头创建的列表aliens中。
第二个for循环是为了验证我们是否创建了30个外星人并且将他们的信息全部储存在列表之中。其中右端 aliens[:5] 是只切片前五个外星人,也可以写成aliens[0:5],从第0个开始一直到第5个之前结束,总共切片了5个外星人。
str()只是将参数转换成字符串类型,便于阅读,len则是计算列表aliens的长度,不是指有多少个字节,而是指有多少个元素。
在字典中存储列表
我们可以假设一个调查人们喜欢的计算机语言的情景,每个人可以喜欢不止一种语言,将收集到的信息用列表呈现:
favorite_languages = {'jen': ['python', 'ruby'],
'sarah': ['c'],
'edward': ['ruby', 'go'],
'phil': ['python', 'haskell'],
}
当我们的列表的值对应多个信息的时候,可以很有效的采取这个方法。
在字典中存储字典
我们利用这样一种情景,将多个用户的多个信息收集起来,用字典嵌套字典的方式进行呈现:
users = {
'aeinstein': {
'first': 'albert',
'last': 'einstein',
'location': 'princeton',
},
'mcurie': {
'first': 'marie',
'last': 'curie',
'location': 'paris',
},
}
for username, user_info in users.items():
print("\nUsername: " + username)
full_name = user_info['first'] + " " + user_info['last']
location = user_info['location']
print("\tFull name: " + full_name.title())
print("\tLocation: " + location.title())
我们可以很清晰的看到,一个uesrs字典里面包含了两个字典:aeinstein和mcurie。在for循环中,将users中的键-值对信息存储在username、user_info中,因此可以定义一个功能为记录全名的的变量full_name,来组合user_info[‘first’]与user_info[‘last’]。
最后输出可以得到用户信息的清晰呈现。
删除字典
删除字典用del命令,如下:
fruits = { 'John': 'apple',
'Mike': 'banana',
'Ashley': 'watermelon'
}
del fruits['John'] #删除键John
如果仍然想要保留字典但是却不需要里面的信息,清空字典即可:
fruits.clear() #清空字典
要是你完全不需要这个字典了,只需要删除它,还是用指令del:
del fruits #删除字典
字典的特性
字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。
两个重要的点需要记住:
1.不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
如下示例:
fruits = { 'John': 'apple',
'John': 'banana',
'Ashley': 'watermelon'
}
print( "John likes " + fruits['John'] + "." )
最后会输出:John likes banana
John喜欢的就是banana了
2.键必须不可变,所以可以用数字、字符串或元组充当,而用列表就不行
错误示例:
#这是错误示范!!
dict = {['Name']: 'Runoob', 'Age': 7}
print ("dict['Name']: ", dict['Name'])
#这是错误示范!!
最后会得到错误提示
Traceback (most recent call last):
File “test.py”, line 3, in <module》
dict = {[‘Name’]: ‘Runoob’, ‘Age’: 7}
TypeError: unhashable type: ‘list’
感谢观看
欢迎各位批评指正
😃