Python-字典

一、字典的定义

  字典和列表一样是可变的容器模型,且可存储任意类型的对象,字典是每个键值对应一个值,对应之间用冒号(:)分割,每个对象之间用(,)分割,整个字典包括在{}中;字典和列表不同,字典的键是唯一的,但值则不必;值可以取任何数据类型,但键值必须是不可变的,如字符串、数字或者元组。

 字典的定义  

dict = {"name":"Alex","Age":18}
print (dict)
输出:
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
{'Age': 18, 'name': 'Alex'}

二、字典的特性

字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。

两个重要的点需要记住: 

1、不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住

例:

dict = {"name":"Alex","Age":18,"wage":30000,"Class":"16期","name":"huige"}        #我们定义了两个name,结果记住的只有最后面的那个值
print(dict)     #打印输出
#我们看输出
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
{'Class': '16期', 'wage': 30000, 'name': 'huige', 'Age': 18}

2、字典的键值不能用列表充当,因为键值是不可变的,所以只能用数字、字符串、元组来充当

例:

dict = {"name":"Alex",8:18,"wage":30000,"Class":"16期",("name"):"huige"}
print(dict)
dict1 = {["name"]:"huige","hh":5000}     #键值有列表
print(dict1)
#看下面报错
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
{8: 18, 'name': 'huige', 'wage': 30000, 'Class': '16期'}          #第一个字典打印出来了
Traceback (most recent call last):
  File "D:/linux/python/all_test/listandtup.py", line 28, in <module>
    dict1 = {["name"]:"huige","hh":5000}                                          #第二个字典报错
TypeError: unhashable type: 'list'

三、字典的操作

  1、字典的访问

  例子:

dict = {"name":"Alex","Age":18,"wage":30000}
print (dict)
print(dict["name"])     #访问字典的name 会输出name 的值
输出:
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
{'Age': 18, 'name': 'Alex', 'wage': 30000}
Alex

2、字典的修改

dict = {"name":"Alex","Age":18,"wage":30000}
dict["Age"] = 16 #更改年龄为16岁
dict["School"] = "老男孩教育"     #新增加字典的键值
print(dict)

输出如下:
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
{'wage': 30000, 'name': 'Alex', 'School': '老男孩教育', 'Age': 16}

3、字典的删除

dict = {"name":"Alex","Age":18,"wage":30000,"Class":"16期"}
del dict["name"]     #删除字典的键
print(dict)
dict.clear()         #清空字典
print(dict)
dict1 = {"name":"huige","Age":16}
print(dict1)
del dict1           #另一种删除字典的方法,这种办法会连字典也删除 所以无法打印字典 报错
print(dict1)

输出
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
{'Age': 18, 'wage': 30000, 'Class': '16期'}
{}
Traceback (most recent call last):
{'Age': 16, 'name': 'huige'}
  File "D:/linux/python/all_test/listandtup.py", line 34, in <module>
    print(dict1)
NameError: name 'dict1' is not defined

四、字典的内置函数

1、len函数

统计字典元素的个数

例子:

dict = {"name":"Alex",8:18,"wage":30000,"Class":"16期",("name"):"huige"}
print(len(dict))

输出
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
4

2、str函数

输出字典可打印字符串的表示

dict = {"name":"Alex",8:18,"wage":30000,"Class":"16期",("name"):"huige"}
print(str(dict))
输出
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
{8: 18, 'wage': 30000, 'name': 'huige', 'Class': '16期'}

3、type函数

输出变量类型,如果变量是字典就返回字典类型

dict = {"name":"Alex",8:18,"wage":30000,"Class":"16期",("name"):"huige"}
print(type(dict))
list12 = ["huige","123"]
print(type(list12))
输出   就是来判断类型的
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
<class 'dict'>
<class 'list'>

五、字典的方法

1、clear()函数

用于清空字典中所有元素

例:

dict = {"name":"Alex",8:18,"wage":30000,"Class":"16期",("name"):"huige"}
print(dict)
dict.clear()     #使用clear函数清空字典
print(dict)
输出
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
{8: 18, 'wage': 30000, 'name': 'huige', 'Class': '16期'}
{}        #清空后

2、copy函数

用于浅复制一个字典

例子:

dict = {"name":"Alex",8:18,"wage":30000,"Class":"16期",("name"):"huige"}
dict1 = dict.copy()
print("打印字典1:%s" %(dict))     #打印字典dict
print("打印字典2:%s" %(dict1))    #打印字典dict1
# 输出
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
打印字典1:{8: 18, 'name': 'huige', 'Class': '16期', 'wage': 30000}
打印字典2:{8: 18, 'name': 'huige', 'wage': 30000, 'Class': '16期'}

copy浅复制的特殊说明

我们直接看例子:

dict = {"name":"Alex","a":{"wage":30000},"Age":18}
print(dict)
dict1 = dict.copy()
print(dict1)
dict["Age"] = 16                     #改变了字典dict的年龄
dict["a"]["wage"] = 40000            #改变了字典dict的工资值
print("打印字典1:%s" %(dict))       
print("打印字典2: %s" % (dict1))
输出:
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
{'Age': 18, 'name': 'Alex', 'a': {'wage': 30000}}               #字典工资值没有变
{'Age': 18, 'name': 'Alex', 'a': {'wage': 30000}}               #字典工资值没有变
打印字典1:{'Age': 16, 'name': 'Alex', 'a': {'wage': 40000}}     #字典1的年龄变了
打印字典2: {'Age': 18, 'name': 'Alex', 'a': {'wage': 40000}}     #字典2的年龄没有变

通过例子我们可以看出浅拷贝也是跟着内存走的,这里以后讲到函数了 我们再详细说明

3、formkeys函数

Python 字典 fromkeys() 函数用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值

语法:

dict.fromkeys(seq[, value])) 
例子:
seq = ("name","age")
dict = dict.fromkeys(seq)             #只加了键,并没有加值
print("新字典的键:%s " % (dict))
输出如下:
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
新字典的键:{'age': None, 'name': None}

seq = ("name","age")                  #加了键和值
dict = dict.fromkeys(seq,"huige")
print("新字典的键:%s " % (dict))
输出如下:
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
新字典的键:{'age': 'huige', 'name': 'huige'} 

 4、get的方法

前面我们在定义字典的时候,就说过如果我们防问了字典里没有的键会报错,那么我们怎么预防呢?或者访问到没有的键时给起指定一个默认的值

那么这里get的方法就用到了

语法:dict.get(key,default=None)    #这里备注一下默认为空

实例:

dict = {"name":"Alex","wage":30000,"Class":"16期"}
print(dict)
print(dict["name"])  #字典里有的值
#print(dict["AA"])    #字典里无的值,这里会报错
# 输出如下:
# C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
# {'wage': 30000, 'Class': '16期', 'name': 'Alex'}
# Traceback (most recent call last):
#   File "D:/linux/python/all_test/listandtup.py", line 62, in <module>
#     print(dict["AA"])    #字典里无的值,这里会报错
# KeyError: 'AA'
# Alex
print(dict.get("AA"))
print(dict.get("AA","b"))
#如下输出
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
{'wage': 30000, 'name': 'Alex', 'Class': '16期'}
Alex
None          #后面没有跟值,为空
b             #后面跟了b 输出B值

5、in操作符

python 字典 in 操作符用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false。

语法: key in dict     #key是要在字典中查找的键

 例子:

dict = {"name":"Alex","Age":18,"wage":30000,"Class":"16期"}
if "Age" in dict:
    print("存在")
else:
    print("键值不存在")
if "AA" in dict:
    print("键值AA存在")
else:
    print("键值AA不存在")
输出
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
存在
键值AA不存在

6、items方法

Python 字典 items() 方法以列表返回可遍历的(键, 值) 元组数组

语法:dict.items()

例:

dict = {"name":"Alex","Age":18,"wage":30000,"Class":"16期"}
print(dict.items())     #  所有的值以元组的形式现实
输出
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
dict_items([('wage', 30000), ('Class', '16期'), ('Age', 18), ('name', 'Alex')])

7、keys的方法

Python 字典 keys() 方法以列表返回一个字典所有的键

语法:dict.keys()

例子:

dict = {"name":"Alex","Age":18,"wage":30000,"Class":"16期"}
print(dict.keys())    #输出列表所有键的值
输出:
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
dict_keys(['name', 'Class', 'wage', 'Age'])

8、setdefault 的方法

Python 字典 setdefault() 方法和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值

例子:

dict = {"name":"Alex","Age":18,"wage":30000,"Class":"16期"}
print ("Age 键的值为 : %s" %  dict.setdefault('Age', None))
print ("Sex 键的值为 : %s" %  dict.setdefault('Sex', None))
print ("新字典为:", dict)
输出:
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
Age 键的值为 : 18
Sex 键的值为 : None
新字典为: {'wage': 30000, 'Sex': None, 'Class': '16期', 'Age': 18, 'name': 'Alex'}

9、update方法

Python 字典 update() 函数把字典dict2的键/值对更新到dict里。

语法:dict.updata(dict2)

例子:

dict = {"name":"Alex","Age":18}
dict1 = {"Class":"16期"}
print(dict)
dict.update(dict1)
print(dict)
输出
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
{'name': 'Alex', 'Age': 18}                             #更新前
{'Class': '16期', 'name': 'Alex', 'Age': 18}             #更新后

10、values 的方法

Python 字典 values() 方法以列表返回字典中的所有值

语法:values()方法语法

dict = {"name":"Alex","Age":18,"wage":30000,"Class":"16期"}
print(dict.values())       #返回字典的所有值
输出
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
dict_values(['16期', 30000, 18, 'Alex'])

就这样字典就这样结束了

posted @ 2017-01-20 15:40  牛逼点的名字  阅读(792)  评论(0编辑  收藏  举报