目录
在Python中,字典是一系列键值对,每个键都与一个值相关联,可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。
a = ["dsf","fd",4,2] #列表
s = {'week':'sunday','num':3,'chinese':'发送'} #字典
s1 = (324,2,'few',"分为") #元组
alien = {'color':'green','pos':3,'list':a,'alin':s,'yz':s1}
print(alien)
{'color': 'green', 'pos': 3, 'list': {'fd', 2, 4, 'dsf'}, 'alin': {'week': 'sunday', 'num': 3, 'chinese': '发送'}, 'yz': (324, 2, 'few', '分为')}
1. 添加键值对
字典是一种动态结构,可随时在其中添加键值对。要添加键值对,可依次指定字典名、用方括号括起的键和相关联的值
alien['x_pos'] = 312
alien['y_pos'] = 32
print(alien)
{'color': 'red', 'pos': 3, 'list': ['dsf', 'gr', 'fd', 4, 2], 'alin': {'week': 'sunday', 'num': 3, 'chinese': '发送'}, 'yz': (324, 2, 'few', '分为'), 'x_pos': 312, 'y_pos': 32}
2. 修改字典中的值
可依次指定字典名和放在方括号内的键,获取与键相关联的值
alien['color'] = 'red'
print(alien['color'])
a.insert(1,'gr')
alien['list'] = a
print(alien['list'])
alien['x_pos'] = 312
alien['y_pos'] = 32
print(alien)
alien['pos'] = alien['pos'] + alien['x_pos'] + alien['y_pos']
print(alien)
red
['dsf', 'gr', 'fd', 4, 2]
{'color': 'red', 'pos': 3, 'list': ['dsf', 'gr', 'fd', 4, 2], 'alin': {'week': 'sunday', 'num': 3, 'chinese': '发送'}, 'yz': (324, 2, 'few', '分为'), 'x_pos': 312, 'y_pos': 32}
{'color': 'red', 'pos': 347, 'list': ['dsf', 'gr', 'fd', 4, 2], 'alin': {'week': 'sunday', 'num': 3, 'chinese': '发送'}, 'yz': (324, 2, 'few', '分为'), 'x_pos': 312, 'y_pos': 32}
3. 删除键值对
del 语句可以彻底删除键值对,使用时必须指定字典名和要删除的键
del alien['alin']
print(alien)
{'color': 'red', 'pos': 347, 'list': ['dsf', 'gr', 'fd', 4, 2], 'yz': (324, 2, 'few', '分为'), 'x_pos': 312, 'y_pos': 32}
4. 遍历字典
4.1 遍历字典的所键
在不需要打印字典的值时,可以使用 keys() 函数,也可以不用,我暂时不知道两者的区别
for name in alien:
print(name.title())
for name in alien.keys():
print(name.title())
Color
Pos
List
Yz
X_Pos
Y_Pos
4.2 遍历所有的键值对
for key,val in alien.items(): #必须包括方法 items(),它返回一个键值对列表
print(key.title(),val)
Color red
Pos 347
List ['dsf', 'gr', 'fd', 4, 2]
Yz (324, 2, 'few', '分为')
X_Pos 312
Y_Pos 32
一个小例子
foods = {'main':'beef','fruit':'apple','lingsi':'latiao','grade':9}
my_love = ["fruit","lingsi"]
for name in my_love:
print(name.title())
if name in foods:
print("my love is " + name.title() + ':' + foods[name].title())
Fruit
my love is Fruit:Apple
Lingsi
my love is Lingsi:Latiao
4.3 顺序遍历字典中的所有键、值
.sorted() 获取特定顺序排列的键列列表的副本
.keys() 获取键
.values() 取值
.set() 对重复元素的列表,去重,剩下列表中的元素都是独一无二的
foods = {'main':'beef','fruit':'apple','grade':'9','fd':'beef','grade':'12'}
print(sorted(foods.keys())) #临时排序,并不改变字典原来的顺序
print(foods) #字典中键只有唯一一个,值可以重复
print(foods.keys()) #返回一个键列表
food_key = sorted(foods.keys()) #将排列后的键值翻入列表
print(food_key)
print("\n")
print(sorted(foods.values())) #临时排序,并不改变字典原来的顺序
print(foods)
print(foods.values()) #返回一个值列表
food_val = sorted(foods.values()) #永久排序,将排列后的键值加入列表
print(food_val)
print(set(food_val)) # set() 去重
['fd', 'fruit', 'grade', 'main']
{'main': 'beef', 'fruit': 'apple', 'grade': '12', 'fd': 'beef'}
dict_keys(['main', 'fruit', 'grade', 'fd'])
['fd', 'fruit', 'grade', 'main']
['12', 'apple', 'beef', 'beef']
{'main': 'beef', 'fruit': 'apple', 'grade': '12', 'fd': 'beef'}
dict_values(['beef', 'apple', '12', 'beef'])
['12', 'apple', 'beef', 'beef']
{'beef', '12', 'apple'}
5. 嵌套
将字典存储在列表中,或将列表存储在字典中称为嵌套
#列表嵌套字典
l1 = []
# 在列表中嵌套5个字典
for num in range(5):
aline = {'food':'beef','color':'red','pos':'34'}
l1.append(aline)
# 输出前2个的列表
for l in l1[:2]:
if l['color'] == 'red':
l['color'] = 'green'
l['pos'] = '21'
elif l['color'] == 'green' :
l['color'] = 'yellow'
l['food'] = 'rice'
else:
l['color'] = 'blue'
print(l)
print('\n')
print("sum = ",len(l1))
{'food': 'beef', 'color': 'green', 'pos': '21'}
{'food': 'beef', 'color': 'green', 'pos': '21'}
sum = 5
#字典嵌套列表
a = ["dsf","fd",'4','3'] #列表
alien = {'color':'green',
'pos':3,
'list':a,
}
for val in alien['list']:
print( val + "\t")
for key,val in alien.items():
print(key.title(),val)
dsf
fd
4
3
Color green
Pos 3
List ['dsf', 'fd', '4', '3']
#在字典中嵌套字典
user = {
'Lasco':{
'ID':'12343',
'adr':'fy',
},
'Ricky':{
'ID':'12342',
'adr':'ji',
},
'Nick':{
'ID':'12341',
'adr':'es',
},
}
for name,info in user.items():
print(name)
f_info = info['ID'] +' ' + info['adr']
print(name + ':' + f_info)
Lasco
Lasco:12343 fy
Ricky
Ricky:12342 ji
Nick
Nick:12341 es