字典
- 无序的可变序列
- 任意对象的无序集合
- 可变,可以任意嵌套
- 字典中的键必须唯一(出现两次后一个值会被记住)
- 字典中的键是不可变的(可以使用数字、字符串、元组但是不能使用列表)
字典的创建:
以键值对的形式存在,所以包含“键”和“值”。
键值之间用冒号分隔,元素之间用“,”分割。所有元素放在“{}”中。
dictionary={12:12345,(12,"123"):6789,"good":"Bob"}
创建空字典:dictionary={}或者dictionary=dict()
dict()除了可以创建一个空字典以外,还能快速的创建字典:
list1=[1,2,3,4,5,6,7,8,9]
list2=[9,8,7,6,5,4,3,2,1]
dictionary=dict(zip(list1,list2))
print(dictionary)
#zip()函数将前面的两个列表转换为字典的键和值,元组同样可以。如果list1和Liste2长度不同则以短的为主。
也可以这样:
dictionary=dict(good='43',bad='234',ok='546')#注意键也可以是数字但是我没有成功
也可以通过dict创建值为空的字典:
test_list=['good','bad','study']
dictionary=dict.fromkeys(list1)
print(dictionary)
输出:{'good':None,'bad':None,'study':None}
一个列表一个元组:
list1=(1,2,3,4,5,6,7)
list2=["good","bad","test","python","java","android","C"]
dictionary={list1:list2}
print(dictionary)
输出:{(1, 2, 3, 4, 5, 6, 7): ['good', 'bad', 'test', 'python', 'java', 'android', 'C']}
list1=[1,2,3,4,5,6,7]
list2=["good","bad","test","python","java","android","C"]
dictionary={list1:list2}
print(dictionary)
会报错,不可以将list1和list2都设为列表。但是如果同为元组则可以。
字典的删除:
字典的删除和列表和元组不同,删除最基础的就是del,直接del即删除整个字典,也可以定点删除。clear()方法意为清除字典内部的元素。pop()字典的对象方法可以定点的删除指定的元素同时返回对应的“键”的值。popitem()也是字典对象的方法,在字典中选取最后的元素删除(个人觉得因为字典是无序的,虽然删除的是你定义字典的时候的顺序来说最后,但是字典本身就是无序的,所以也算是随机删除的)时返回相应的键值对。示例如下:
dictionary={'first':1,'second':2,'third':3,'fourth':4,'fifth':5,'sixth':6}
del dictionary['fourth']
print(dictionary)
#输出:
#{'first': 1, 'second': 2, 'third': 3, 'fifth': 5, 'sixth': 6}
list1=(1,2,3,4,5,6,7)
list2=(7,6,5,4,3,2,1)
dictionary=dict(zip(list1,list2))
print(dictionary) #输出{1: 7, 2: 6, 3: 5, 4: 4, 5: 3, 6: 2, 7: 1}
print(dictionary.popitem()) #输出(7, 1)
print(dictionary) #输出{1: 7, 2: 6, 3: 5, 4: 4, 5: 3, 6: 2}
print(dictionary.pop(2)) #输出6
print(dictionary) #输出{1: 7, 3: 5, 4: 4, 5: 3, 6: 2}
dictionary.clear()
print(dictionary) ##输出{}
字典的输出和访问:
前面一直用print进行输出,但是字典一般用少这么用。一般是根据指定的键找对应的值。
在列表和元组中可以通过下标对元素进行索引,但是字典是无序的无法通过下标进行索引,所以只能通过键来索引出值,如下:
dictionary={'first':1,'second':2,'third':3,'fourth':4,'fifth':5,'sixth':6}
print(dictionary['first'])
#输出 1
但是很多的情况下我们是不知道或者是不确定一个“键”是否存在,如果对不存在于字典中的键键值对进行索引的话就会报错,所以可以加上一个if判断一下。
print("结果是:",dictionary['seventh'] if 'seventh' in dictionary else "无该键值对")
输出:结果是: 无该键值对
Python推荐使用字典对象的get()方法:
print(dictionary.get('fourth',"无该键值对"))
print(dictionary.get('seventh',"无该键值对"))
#输出:4
# 无该键值对
其中get()方法后面如果不设定无键时返回的值,则会返回一个“None"
字典的遍历:
这其中有一个items()方法:
dictionary={'first':1,'second':2,'third':3,'fourth':4,'fifth':5,'sixth':6}
print(dictionary.items())
#输出:dict_items([('first', 1), ('second', 2), ('third', 3), ('fourth', 4), ('fifth', 5), ('sixth', 6)])
也可以这样:
for item in dictionary.items():
print(item)
#输出: ('first', 1)
# ('second', 2)
# ('third', 3)
# ('fourth', 4)
# ('fifth', 5)
# ('sixth', 6)
或者这样直接提取出键、值:
for key,value in dictionary.items():
print(key,"键对应的值是:",value)
#输出:
#first 键对应的值是: 1
#second 键对应的值是: 2
#third 键对应的值是: 3
#fourth 键对应的值是: 4
#fifth 键对应的值是: 5
#sixth 键对应的值是: 6
其中Python也提供了key(),和value()方法:
print(dictionary.keys())
print(dictionary.values())
#输出:
#dict_keys(['first', 'second', 'third', 'fourth', 'fifth', 'sixth'])
#dict_values([1, 2, 3, 4, 5, 6])
添加、修改字典元素:
向字典里面添加元素:
dictionary={'first':1,'second':2,'third':3,'fourth':4,'fifth':5,'sixth':6}
print(dictionary)
dictionary['add_key']="add_value"
print(dictionary)
#输出:
#{'first': 1, 'second': 2, 'third': 3, 'fourth': 4, 'fifth': 5, 'sixth': 6}
#{'first': 1, 'second': 2, 'third': 3, 'fourth': 4, 'fifth': 5, 'sixth': 6, 'add_key': #'add_value'}
对于修改可以看作是添加相同键的元素,基于字典的特殊性(字典里面不允许出现相同的键),字典添加的键。如果字典原本有相同的键则会覆盖原先的值。
dictionary={'first':1,'second':2,'third':3,'fourth':4,'fifth':5,'sixth':6}
print(dictionary)
dictionary['fourth']=100
print(dictionary)
#输出:
#{'first': 1, 'second': 2, 'third': 3, 'fourth': 4, 'fifth': 5, 'sixth': 6}
#{'first': 1, 'second': 2, 'third': 3, 'fourth': 100, 'fifth': 5, 'sixth': 6}
字典推导式:
可以快速的创建字典:
randomdict = {i: random.randint(10, 100) for i in range(1, 5)}
print("生成的字典:", randomdict)
#输出:生成的字典: {1: 85, 2: 25, 3: 79, 4: 37}
业余开发者,大神勿喷欢迎交流。微信: