简单的字典
字典,类似java中Map,数据都是键-值对(key-value)的形式存储,可对比着记忆
(注意:1.字典使用{ }
表示,列表是[ ]
2.key必须是不变的,才能计算出value的值,如字符串,整数等,但是列表是可变的,不能作为字典的key)
代码:
user = {'name': 'gourdBaBy', 'age': '1'} #注意键值对中间是冒号 : 不同键值对中间是逗号 ,
print("name: " + user['name'])
print("age: " + user['age'])
结果:
name: gourdBaBy
age: 1
使用字典
添加键-值对
(字典添加时不关心添加顺序,一般新建空字典,然后根据逻辑添加数据)
代码:
user = {'name': 'gourdBaBy', 'age': 1}
print(user)
user['height'] = 60 #添加键值对的时候直接赋值给新key即可
user['ability'] = 'ironskin'
print(user)
结果:
{'age': 1, 'name': 'gourdBaBy'}
{'height': 60, 'age': 1, 'ability': 'ironskin', 'name': 'gourdBaBy'}
修改字典中的值
同列表一样,直接赋值语句即可
代码:
user = {'name': 'gourdBaBy', 'age': 1}
print(user['name'])
user['name'] = 'yeye' #此处修改name的值
print(user['name'])
结果:
gourdBaBy
yeye
判断字典中是否含有某个key,例如
代码:
info = {'tom': 18, 'jack': 22, 'lili': 55}
print ('tom' in info) #in只是查询键(key)是否存在
print ('lucy' in info)
print (info.get('tom')) #get()可指定key来查询是否存在
print (info.get('lucy'))
print (info.get('lucy', 100)) #get()不存在时,可指定返回值
结果:
True
False
18
None
100
删除键-值对
使用del
语句
代码:
user = {'name': 'gourdBaBy', 'age': 1}
print(user)
del user['age'] #删除age键值对
print(user)
结果:
{'age': 1, 'name': 'gourdBaBy'}
{'name': 'gourdBaBy'}
还可以使用pop()
语句,效果同列表,但pop()
必须带参数,因为列表是有序的,默认删除最后的一项,字典是无序的
代码:
info = {'tom': 18, 'jack': 22, 'lili': 55}
print (info.pop('tom'))
print info
# print (info.pop()) #该句会报错,会提示必须传入参数
结果:
18
{'lili': 55, 'jack': 22}
遍历字典
可以用for
循环遍历字典,字典是没有顺序的
代码:
user = {'name': 'gourdBaBy', #字典建议写成这样的格式
'age': 1,
'ability': 'ironskin',
'height': 60}
for key, value in user.items(): #注意是items()
print("Key: " + key)
print("Value: " + str(value) + "\n")
结果:
Key: name
Value: gourdBaBy
Key: ability
Value: ironskin
Key: age
Value: 1
Key: height
Value: 60
若代码中的
for key, value in user.items():
改为
for key in user.keys():
或者for key in user:
(此状态是默认状态)
则只遍历键(key)
同理,若改为
for value in user.values():
则只遍历值(value)
若有重复的值,可以使用set()
函数,传入的参数是个list
对结果进行重复值清除的处理
代码:
user = {'A': 2,
'B': 1,
'C': 2,
'D': 1}
for value in set(user.values()): #set函数处理结果,清除重复值
print("Value: " + str(value))
结果:
Value: 1
Value: 2
set
set是个无序不重复的集合,可传入iterable
类型的数据,如无嵌套类型的列表和字典或字符串
代码:
a = {'a': 'b', 'c': 'd', 'c': 'e'}
print (set(a)) #传入字典,只显示key值,且不重复
a = 'ssdfasdf'
print (set(a))
a = ['a', 'b', 'c', 'c']
print (set(a))
结果:
set(['a', 'c'])
set(['a', 's', 'd', 'f'])
set(['a', 'c', 'b'])
set添加和删除
添加用add()
方法,删除用remove()
方法
代码:
myset = set(['a', 'b', 'c']) #字典用法相同
print (myset)
myset.add('d')
print (myset)
myset.remove('a')
print (myset)
结果:
set(['a', 'c', 'b'])
set(['a', 'c', 'b', 'd'])
set(['c', 'b', 'd'])
set交集并集
两个set可以做数学里交集和并集的运算
代码:
myset1 = set(['a', 'b', 'c'])
myset2 = set(['a', 'c', 'd'])
print (myset1 & myset2) #相交
print (myset1 | myset2) #相并
结果:
set(['a', 'c'])
set(['a', 'c', 'b', 'd'])
嵌套
列表中嵌套字典
代码:
user1 = {'name': 'A', 'age': 11}
user2 = {'name': 'B', 'age': 12}
user3 = {'name': 'C', 'age': 13}
users = [user1, user2, user3] #列表中存储字典
for user in users:
print(user)
结果:
{'name': 'A', 'age': 11}
{'name': 'B', 'age': 12}
{'name': 'C', 'age': 13}
e.g. 创建30个相同的字典,存储到列表中,只打印前4个。
代码:
# 先创建一个空列表,用于存储创建的字典
users = []
# 创建30个字典
for user in range(30): #循环30次,注意rang()函数的使用
user = {'name': 'Jack', 'age': 10}
users.append(user)
# 显示前4个
for user in users[:4]:
print(user)
print("...")
结果:
{'name': 'Jack', 'age': 10}
{'name': 'Jack', 'age': 10}
{'name': 'Jack', 'age': 10}
{'name': 'Jack', 'age': 10}
...
字典中嵌套列表
注意:键(key)不能是列表,只能值(value)是列表
代码:
user = {
'name': 'Jack',
'favorite_book': ['葫芦娃', '少林寺', '尼姑庵'],
}
print("你的名字是:\n" + user['name'] + "\n你最喜欢的书是:")
for book in user['favorite_book']: #遍历字典favorite_book键的值(列表)
print(book)
结果:
你的名字是:
Jack
你最喜欢的书是:
葫芦娃
少林寺
尼姑庵
字典中嵌套字典
注意:键(key)不能是字典,只能值(value)是字典
代码:
users = {
'BigDog': { #键(key)为BigDog,值(value)为后边的字典
'name': 'Jack',
'age': 10,
'location': 'CHN',
},
'SmallCat': {
'name': 'Lili',
'age': 12,
'location': 'USA',
},
}
for username, userinfo in users.items(): #键值对
print("用户名是:" + username)
print("个人信息是:")
print("\t名字:" + userinfo['name'])
print("\t年龄:" + str(userinfo['age']))
print("\t地址:" + userinfo['location'])
结果:
用户名是:SmallCat
个人信息是:
名字:Lili
年龄:12
地址:USA
用户名是:BigDog
个人信息是:
名字:Jack
年龄:10
地址:CHN