码迷,mamicode.com
首页 > 编程语言 > 详细

Python的序列类型——字典

时间:2018-04-23 00:11:42      阅读:346      评论:0      收藏:0      [点我收藏+]

标签:The   保存   3.3   nbsp   不可变   bool   变化   lan   不能   

            字典

  字典dict,存储的元素是一种无序的键值对(K-V),字典的K值为任意不可变数据类型(如:字符串、

数字、元组),V值为任意数据类型。在计算机内部保存数据的时候是用哈希表表示的,列表不支持转化为

哈希表的原因是K是变化的(列表的可以增、删、改),而元组却可以用哈希表表示。由于它的无序性,使

得它不能像列表那样使用切片。但是我们能对字典的中的K—Y值进行更改。使用for循环时(不能使用while),

默认之只输出K值,不输出V值。当然,在字典中也提供了相应的内置函数弥补这个缺陷。

  还有一点需要注意,当字典中有两个相同的K值时,前一个V值会被后一个V值覆盖。这里介绍一个典型

的例子。比如当K值为bool类型的时,计算机认为True1,False0,若它前面的K值有0或者1,则将会

覆盖掉。在输出时True被替换为1,False被替换为0,这是在实验时才发现有这个特点。

  By the way,bool类型的非零值在计算机内部都会被表示为1。使得bool类型为False的值有0,  空(

None ),空字符串( " " ), 空元组( ( ) ),空列表( [ ] ),空字典( { } ),空集合( set( ) )。

 

1.  创建字典

#创建字典
info = {
    "k1":1,
    "k2":2,
    "k3":3,
       4:444,
       5:True,
       6:6,
    "k7":["a","b","c","d"],
    "k8":("e","f","g","h",),
    }


#测试
print(info[k1])   #取值
print(info[4])
print(info["k7"][2])
del info["k7"][2]   #删除K
print(info["k7"])   #显示删除后的内容

 

 

2.  K值相同时 

info = {
       1:1,
    True:123,   #覆盖前一个的V值
   False:456,
    "k7":["a","b","c","d"],
    "k7":("e","f","g","h",),  #覆盖前一个的V值
    }
print(info)  #输出:{1: 123, ‘k7‘: (‘e‘, ‘f‘, ‘g‘, ‘h‘)}

 

 

3.  内置函数

3.1   fromkeys(*args, **kwargs)函数:是静态方法

#根据序列创建字典,由**kwargs指定统一的值
v = dict.fromkeys(["k1","k2","k3"],"see")
print(v)   #输出:{‘k1‘: ‘see‘, ‘k2‘: ‘see‘, ‘k3‘: ‘see‘}

 

3.2   setdefault()函数:  设置默认值,若设置的值已存在,则返回已存在的value

dic_ky = {"k1":"001","k2":"002"}
v1 = dic_ky.setdefault(k3,003)  #k3不存在,插入字典后返回一个值
v2 = dic_ky.setdefault(k1,111)  #设置失败,返回看字典K1的原值001
print(v1)   #输出:003
print(v2)   #输出:001

 

 

3.3   update()函数: 更新字典

#第一种方法
dic_ky = {"k1":"001","k2":"002"}
dic_ky.update({k1:111,k2:222})
print(dic_ky)  #输出:{‘k1‘: ‘111‘, ‘k2‘: 222}

#第二种方法
dic_ky.update(k1=a,k2=b,k3=c,k4=d)
print(dic_ky)  #输出:{‘k1‘: ‘a‘, ‘k2‘: ‘b‘, ‘k3‘: ‘c‘, ‘k4‘: ‘d‘}

 

 

3.4   keys函数: 取K值

for i in info.keys():
    print(i)

 

 

3.5   values()函数: 取V值

for i in info.values():
    print(i)

 

 

3.6   items()函数: 取K-V值,循环时需要使用两个迭代变量k,v

for k,v in info.items():
    print(k,v)

 

 

3.7   get(d=None)函数: 安全的取值函数,当取的K不存在时不会报错

v = info.get(k,"ERROR")  #ERROR是不存在时返回的值,若该参数忽略,则返回None
print(v)                #输出:ERROR

 

 

3.8   pop()函数: 将指定K值的V删除,返回值可以接收被删除的V值

v = info.pop(k,"ERROR")  #ERROR是不存在时返回的值,若该参数忽略,则返回None
print(v)                #输出:ERROR

 

 

3.9   popitem()函数: 返回被随机删除的键值对

k,v = info.popitem()  #返回被随机删除的键值对
print(k,v)          #输出:k8 (‘e‘, ‘f‘, ‘g‘, ‘h‘)

 

 

3.10 clear()函数 和 copy()函数不再列出。。。

 

 

 

 

 

Python的序列类型——字典

标签:The   保存   3.3   nbsp   不可变   bool   变化   lan   不能   

原文地址:https://www.cnblogs.com/Lynnblog/p/8910245.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!