字典

一、什么是字典?

  字典是python的基础数据类型之一,字典可以存储大量数据,关系型数据。

同样他也是python中唯一的映射关系的数据类型。

数据类型的分类

  可变的(不可哈希)数据类型: list , dict, set

   不可变的(可哈希的)数据 类型: str, int, bool, tuple

  dic = { "name":"jin", "age":18, "sex":"male" }

  键值对的形式存在的,   键:值 

  字典的键,必须是不可变的数据类型。( 工作吕,都是由数字,或者 str 组成 )

       字典的值是任意数据类型。

  优点:

    字典可以存储大量的数据,关系型数据。

    查询速度快。

python3.5 之前包括 3.5 版本,字典是无序的。

python3.6 开始,是有序的。 (就是插入的顺序)

二、字典的增删改查

2.1 增

dic = {  "name":'孙悟空',"年龄":28,"sex":'male' }

# dic['job'] = 'IT'                                                       # 若键存在,会覆盖键对应的原有值;键不存在,添加该键值对

dic.setdefault('job','IT')                                      # 若键不存在,添加之,否则什么操作也不作,而返回该键对应的值

dic.setdefault('sal')                            # 若仅指定第一个参数 键,而不指定第二个参数 value ,第二个参数默认为None

print(dic)                              # 输出结果: {'name': '孙悟空', '年龄': 28, 'sex': 'male', 'job': 'IT', 'sal': None}

2.2 删除

dic = {  "name":'孙悟空',"年龄":28,"sex":'male' }

dic.pop(key)                            # 删除指定键对应的键值对,若指定键不存在,会报错;

dic.pop(key,"指定键不存在”)                     # 删除字典中指定键 对应的键值对,若指定键不存,返回第二个参数的内容

dic.popitem()                                      # python3.5及以前,随机删除一个键值对,python3.6开始,由于字典是有序的了,删除最后一组键值对

dic.clear()                                       # 清除所有的键值对,但字典还存在

del dic['name']                               # 按照 键 ,删除对应的键值对,

del dic['name1']                           # 若指定的 键 不存在,会抛出错误:KyeError: 'name1'

del dic                                        #  从内存级别删除整个字典,字典不复存在了

2.3 改

dic = {  "name":'孙悟空',"年龄":28,"sex":'male' }

dic['name'] = "chris"    # 直接改

dic.update(name = "西瓜大王")    # 覆盖添加

notes:

dic.update( 'name' = ""快乐大王)  #  这里关键字不能加引号,否则报错:SyntaxError: keyword can't be an expression

2.4  查

dic = {  "name":'孙悟空',"年龄":28,"sex":'male' }

print( dic['name'] )                     # 按照 key 去查 ,键对应的值 ,缺点:如果键不存在,会报错 

dic.get( 'name' )                       # 若键不存在,不会报错,默认返回None

dic.get( 'name1', "指定的键不存在")           # 若键不存在,自定义返回值

通过 for 循环 查:

dic.keys()     、    dic.values()  、 dic.items()

for key in dic.keys():

  print(key,end=" ")                     # 输出结果:name 年龄 sex job sal

for value in dic.values():

  print(value, end = " ")                 # 输出结果: 孙悟空 28 male IT None

for key,value in dic.items():                # 实际利用了分别赋值 原理:    a,b = 10,20

  print(key,value,end = " ")             # 输出结果: name 孙悟空 年龄 28 sex male job IT sal None

三、字典的嵌套

 四、产生字典的方法:

      dic = {'name':'chris','age':18}

       dict.fromkeys(iterable ,value)

       dic.fromkeys(iterable,value)

       dict() 方法

   dict()方法,详解:

        

class dict(object):
"""
dict() -> new empty dictionary
dict(mapping) -> new dictionary initialized from a mapping object's
(key, value) pairs
dict(iterable) -> new dictionary initialized as if via:
d = {}
for k, v in iterable:
d[k] = v
dict(**kwargs) -> new dictionary initialized with the name=value pairs
in the keyword argument list. For example: dict(one=1, two=2)
"""




dic1 = dict() # dict() 产生一个新的空字典
print(id(dic1))
dic2 = {'name':'chris','age':28}
dic2_copy = dict(dic2.items()) # 根据映射对象的键值对,产生一个新的字典
print(id(dic2),id(dic2_copy)) # 2266685747488 2266685748856
print(dict([["one",1]])) # 将可迭代对象的每个元素的两个元素,分别赋值 k, v
print(dict(one=1,two=2)) # 通过关键字参数对 ,产生新的字典



# def func(x):return x%2 == 0
# ret = filter(func,[1,2,3,4,5,6,7])
# print(ret)
# for i in ret:
# print(i)
#
# def fmap(a,b):
# return (a,b)
# dic2 = {'name':'chris','age':18}
# print(dic2.items())
# ret = map(fmap,['name','age'],['chris',18])
# print(ret)
# # print(ret)
# # dict(ret)
# # print(fmap(3,5))
# print(dict(ret))


dic = {'name':'chris','age':18}
print(dic.items())
newdic = dict(dic.items())
print(newdic)
原文地址:https://www.cnblogs.com/chris-jia/p/9444091.html