资讯专栏INFORMATION COLUMN

Python全栈之路系列之字典数据类型

caoym / 2654人阅读

摘要:字典在基本的数据类型中使用频率也是相当高的,而且它的访问方式是通过键来获取到对应的值,当然存储的方式也是键值对了,属于可变类型。

字典(dict)在基本的数据类型中使用频率也是相当高的,而且它的访问方式是通过键来获取到对应的值,当然存储的方式也是键值对了,属于可变类型。

创建字典的两种方式

第一种

>>> dic = {"k1":"123","k2":"456"}
>>> dic
{"k1": "123", "k2": "456"}
>>> type(dic)

第二种

>>> dic = dict({"k1":"123","k2":"456"})
>>> dic
{"k1": "123", "k2": "456"}
>>> type(dic)

在创建字典的时候,__init__初始化的时候还可以接受一个可迭代的变量作为值

>>> li = ["a","b","c"]
>>> dic = dict(enumerate(li))
>>> dic
{0: "a", 1: "b", 2: "c"}

默认dict再添加元素的时候会把li列表中的元素for循环一边,添加的时候列表中的内容是字典的值,而键默认是没有的,可以通过enumerate方法给他加一个序列,也就是键。

与其变量不同的是,字典的键不仅仅支持字符串,而且还支持其他数据类型,譬如:

# 数字
>>> D = {1:3}
>>> D[1]
3
# 元组
>>> D = {(1,2,3):3}
>>> D[(1,2,3)]
3

字典解析

>>> D = {x: x*2 for x in range(10)}
>>> D
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18}
# 可以使用zip
>>> D = {k:v for (k, v) in zip(["a","b","c"],[1,2,3])}
>>> D
{"a": 1, "c": 3, "b": 2}
字典所提供的常用方法

删除字典中的所有元素

clear(self):

>>> person = dict({"name": "ansheng", "age": 18})
>>> person
{"age": 18, "name": "ansheng"}
>>> person.clear()
# 清空字典的内容之后字典会变成一个空字典
>>> person
{}

返回一个字典的浅复制

copy(self):

>>> person = dict({"name": "ansheng", "age": 18})
>>> person.copy()
{"age": 18, "name": "ansheng"}

创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值

fromkeys(S, v=None):

属性 描述
S 字典键值列表
v 可选参数, 设置键序列(seq)的值
>>> seq = ("name", "age", "sex")
>>> dict = dict.fromkeys(seq)
>>> dict
{"age": None, "name": None, "sex": None}

fromkeys方法就是把一个字典的key更新到另外一个字典中,默认的值可以设置

>>> dic={"k1":123,"k2":456,"k4":111}
>>> dic
{"k1": 123, "k4": 111, "k2": 456}
# 创建一个新的字典,默认值是`123`
>>> dic.fromkeys(["k1","k2","k3"],"123")
{"k1": "123", "k3": "123", "k2": "123"}

返回指定键的值,如果值不在字典中返回默认值

get(self, k, d=None):

属性 描述
key 字典中要查找的键
default 如果指定键的值不存在时,返回该默认值值
>>> person = {"name": "ansheng", "age": 18}
>>> person.get("name")
"ansheng"

成员运算符in可以判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false

>>> person = {"name": "mr", "age": 18}
>>> "name" in person
True
>>> "aname" in person
False

以列表返回可遍历的(键, 值)元组数组

items(self):

>>> person = {"name": "mr.wu", "age": 18}
# 以元组的方式输出出来
>>> person.items()
[("age", 18), ("name", "mr.wu")]

以迭代器的方式返回字典的键和值

iteritems(self):

>>> person.iteritems()

迭代key

iterkeys(self):

>>> person = {"name": "ansheng", "age": 18}
>>> person.iterkeys()

迭代value

itervalues(self):

>>> person = {"name": "ansheng", "age": 18}
>>> person.itervalues()

以列表的形式返回一个字典所有的键

keys(self):

>>> person = {"name": "ansheng", "age": 18}
>>> person.keys()
["age", "name"]

删除指定给定键所对应的值,返回这个值并从字典中把它移除

pop(self, k, d=None):

>>> person = {"name": "ansheng", "age": 18}
>>> person
{"age": 18, "name": "ansheng"}
# 返回删除键对应的值
>>> person.pop("age")
18
>>> person
{"name": "ansheng"}

随机返回并删除字典中的一对键和值,因为字典是无序的,没有所谓的"最后一项"或是其它顺序。

popitem(self):

>>> person = {"name": "ansheng", "age": 18}
# 随即删除并显示所删除的键和值
>>> person.popitem()
("age", 18)
>>> person
{"name": "ansheng"}

如果key不存在,则创建,如果存在,则返回已存在的值且不修改

setdefault(self, k, d=None):

属性 描述
key 查找的键值
default 键不存在时,设置的默认键值
>>> person = {"name": "ansheng", "age": 18}
# 如果字典中有这个键,那么就输出这个键的值
>>> person.setdefault("name")
"ansheng"
# 如果没有则不输出,但是会创建一个键,值为默认的"None",值是可以指定的
>>> person.setdefault("sex")
>>> person
{"age": 18, "name": "ansheng", "sex": None}

把字典dic2的键/值对更新到dic1里

update(self, E=None, **F):

>>> dic1 = {"name":"ansheng"}
>>> dic2 = {"age":"18"}
>>> dic1
{"name": "ansheng"}
>>> dic2
{"age": "18"}
>>> dic1.update(dic2)
>>> dic1
{"age": "18", "name": "ansheng"}

显示字典中所有的值

values(self):

>>> person = {"name": "ansheng", "age": 18}
>>> person.values()
[18, "ansheng"]

所有项,只是将内容保存至view对象中

viewitems(self):

>>> person = {"name": "ansheng", "age": 18}
>>> person.viewitems()
dict_items([("age", 18), ("name", "ansheng")])

viewkeys(self):

>>> person = {"name": "ansheng", "age": 18}
>>> person.viewkeys()
dict_keys(["age", "name"])

viewvalues(self):

>>> person = {"name": "ansheng", "age": 18}
>>> person.viewvalues()
dict_values([18, "ansheng"])

对字典的键进行排序,其原理就是把key转换为列表,然后使用sort对列表排序,最后根据列表循环字典中的值

>>> D = {"a":1,"b":2,"c":3}
>>> D
{"a": 1, "c": 3, "b": 2}
>>> Ks = list(D.keys())
>>> Ks
["a", "c", "b"]
>>> Ks.sort()
>>> Ks
["a", "b", "c"]
>>> for k in Ks: print(k, D[k])
... 
a 1
b 2
c 3

原文链接

Python全栈之路系列文章

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38336.html

相关文章

  • Python全栈系列列表数据类型

    摘要:列表同字符串一样都是有序的,因为他们都可以通过切片和索引进行数据访问,且列表的的是可变的。 列表(list)同字符串一样都是有序的,因为他们都可以通过切片和索引进行数据访问,且列表的的是可变的。 创建列表的几种方法 第一种 name_list = [Python, PHP, JAVA] 第二种 name_list = list([Python, PHP, JAVA]) 创建一个空列表 ...

    琛h。 评论0 收藏0
  • Python全栈系列字符串格式化

    摘要:目前提供的字符串格式化方式有两种百分号方式方式这两种方式在和中都适用,百分号方式是一直内置存在的,方式为近期才出来的。 This PEP proposes a new system for built-in string formatting operations, intended as a replacement for the existing % string formatti...

    avwu 评论0 收藏0
  • Python全栈系列元组数据类型

    摘要:元组和列表的为唯一区别就是列表可以更改,元组不可以更改,其他功能与列表一样创建元组的两种方法第一种第二种如果元祖内只有一个元素,那么需要加上一个逗号,否则就变成字符串了。 元组(tuple)和列表的为唯一区别就是列表可以更改,元组不可以更改,其他功能与列表一样 创建元组的两种方法 第一种 ages = (11, 22, 33, 44, 55) 第二种 ages = tuple((11,...

    李涛 评论0 收藏0
  • Python全栈系列函数

    摘要:指定参数即在用户调用函数的时候不需要按照函数中参数的位置中所填写,指定参数是需要制定参数对应的值。默认参数可以写在定义参数的后面,如果用户调用函数是没有制定参数,那么就会用默认参数,如果用户指定了参数,那么用户指定的参数就会代替默认参数。 函数 函数是Python为了代码最大程度的重用和最小化代码冗余而提供的最基本的程序结构。 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅...

    guyan0319 评论0 收藏0
  • Python全栈系列数字数据类型

    摘要:数字在中,整型长整型浮点数负数布尔值等都可以称之为数字类型。数字类型的复杂度整数比浮点数简单浮点数比复数简单。布尔类型布尔类型其实就是数字和的变种而来,即真或假,实际上就是内置的数字类型的子类而已。 上篇文章中我们简单的体验了Python语言基本概念与语法,那么在继续深入下去的过程中,不妨先学习几个常见的Python内置数据类型?这也是大部分Python教科书的学习目录,由浅至深,慢慢...

    Developer 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<