day2-字典

一、简述

  字典是Python中的又一种数据结构,它是通过key-value的数据类型,跟我们小时候用的新华字典差不多,通过key去访问value

二、语法

1、语法

stu_info = {
    "zhangsan":23,
    "lisi":18,
    "qigao":18
}

 2、特性

①字典是无序的

②字典是通过key去访问value(元素不存在重复)

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#通过key值访问对应的元素
>>> stu_info["qigao"]
18

三、基本用法

1、增加

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#新增
>>> stu_info["wanger"] = 30 
#输出结果
>>> stu_info
{'wanger': 30, 'lisi': 18, 'zhangsan': 23, 'qigao': 18}

 2、修改

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#修改'qigao'对应的value值,由18改为23
>>> stu_info["qigao"] = 23
#输出
>>> stu_info
{'wanger': 30, 'lisi': 18, 'zhangsan': 23, 'qigao': 23}

 3、删除(del、pop、popitem)

  ①del

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> del stu_info['qigao']
#结果输出
>>> stu_info
{'zhangsan': 23, 'lisi': 18}

注:如果是del stu_info的话,则是删除stu_info这个变量

②pop(k)

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#删除时给出提示
>>> stu_info.pop("qigao")
18
#输出结果
>>> stu_info
{'zhangsan': 23, 'lisi': 18}

  ③popitem()

  随机删除字典中的一个元素

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#随机删除的元素
>>> stu_info.popitem()
('lisi', 18)
#输出结果
>>> stu_info
{'zhangsan': 23, 'qigao': 18}

 4、查找

  ①key值在字典中存在

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> "qigao"  in stu_info  #标准用法,在Python3和Python2.7都可以用
True

 以上这种用法,在Python3和Python2.7都可以用,但是下面这种情况只能在Python2.7上用,Python3已经废除了

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> stu_info.has_key("qigao") #Python2.7的用法,在Python3中不可使用
True

   ②get(k)

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#存在则返回对应的value
>>> print(stu_info.get("qigao"))
18
#不存在返回None
>>> print(stu_info.get("wanger"))
None

   ③通过k获取value

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#存在key返回value
>>> stu_info["qigao"]
18
#不存在key提示报错
>>> stu_info["wanger"]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 'wanger'

 小结:get(k)不存在key值,则返回None,通过key直接访问会报错,所以建议推荐用get(k)这个方法获取value

 5、多级字典嵌套及操作

av_catalog = {
    "欧美":{
        "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
        "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
        "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
        "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
    },
    "日韩":{
        "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
    },
    "大陆":{
        "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
    }
}

av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
print(av_catalog["大陆"]["1024"])
#ouput 
['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']

四、其他用法

1、values()

返回字典中所有value,生成一个列表

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> stu_info.values()
#输出
dict_values([23, 18, 18])

 2、keys()

返回字典中所有key,生成一个列表

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> stu_info.keys()
#输出结果
dict_keys(['zhangsan', 'qigao', 'lisi'])

 3、setdefault(k,v)

setdefault()表示去取字典中的key,如果取不到,则设置新值,相反如果取到,则返回原有默认值

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#设置不存在的key
>>> stu_info.setdefault("wanger",25)
25
>>> stu_info
#输出结果
{'wanger': 25, 'zhangsan': 23, 'qigao': 18, 'lisi': 18}
#设置存在的key
>>> stu_info.setdefault("qigao",23)
18
>>> stu_info
#输出结果
{'wanger': 25, 'zhangsan': 23, 'qigao': 18, 'lisi': 18}

 4、update(dict)

 update()是把两个字典合并成一个新的字典,中间有交叉的key,更新替换成新值,没有交叉就直接创建

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> yhd = {"qigao":23,1:2,3:4}
>>> stu_info.update(yhd)
>>> stu_info
#输出
{1: 2, 'lisi': 18, 3: 4, 'qigao': 23, 'zhangsan': 23}

 注:以后提到更新(update),就是直接原有的字典或者列表上修改,添加(上面的例子就是在stu_info基础上更新的)

5、items()

把字典转换成列表

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> stu_info.items()
dict_items([('lisi', 18), ('qigao', 18), ('zhangsan', 23)])

 6、fromkeys(list,默认值)

初始化一个字典

>>> dict.fromkeys(["zhangsan","wanger"],1)
{'wanger': 1, 'zhangsan': 1}

 注:创建多层会有浅copy的作用,所以不建议使用,只需要做了解即可

7、clear()

清空字典

>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> stu_info.clear()
#输出
>>> stu_info
{}

五、循环字典

方法1、

for key in info:
    print(key,info[key])

 方法2、

#方法2
for k,v in info.items(): #会先把dict转成list,数据量大时莫用
    print(k,v)

 小结:

①方法1的效率比方法2的效率高很多

②方法1是直接通过key取value

③方法2是先把字典转换成一个列表,再去取值

④当数据量比较大的时候,用第二种方法时,字典转换成列表的这个过程需要花大量的时间老转换,当然数据量不大,没有关系,效率差不多

 

posted @ 2017-02-14 11:09  帅丶高高  阅读(880)  评论(0编辑  收藏  举报