hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 文章 - 后端开发 - 正文 看Cosplay古风插画小姐姐,合集图集打包下载:炫龙网 · 炫龙图库

Python字典中你必需晓得的用法_后端开发

2019-11-30后端开发ki4网19°c
A+ A-
本文Python版本为3.7.X,浏览本文之前需相识python字典的基础用法。

引见

字典(dict)是Python中内置的一个数据结构,由多个键值对构成,键(key)和值(value)用冒号分开,每一个键值对之间用逗号(,)分开,全部字典包含在大括号中({}),键必需是唯一的,值能够取任何范例,然则键必需是不可变范例,如字符串,数字或元组。

引荐:《python教程

底层运用了hash表来关联key和value,dict是无序的。特性包含:

● 查找和插进去的速率极快,不会跟着key的增添而变慢;

● 需要占用的内存较多

所以,dict是一种以空间调换时候的数据结构,应用于需要疾速查找的场景。

操纵:经常运用要领

get()

返回指定键的值,假如key不存在,则返回默认值(默以为None),而不会报错,语法为dict.get(key)。

dict_1['age'] = 24
In [7]: print(dict_1.get('age'))
24
In [11]: print(dict_1.get('nama'))
None
In [12]: print(dict_1['nama'])
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-12-ef61a380920e> in <module>
----> 1 print(dict_1['nama'])
KeyError: 'nama'

key in dict

运用in操纵符来推断键是不是存在于字典中,存在则返回True,不然返回False,语法为:key in dict。

In [15]: dict_1
Out[15]: {'name': None, 'age': 24, 'sex': None}
In [16]: print('name' in dict_1)
True
In [17]: print('nama' in dict_1)
False

在python 2中该功用运用has_key()要领完成。

items()

以列表情势返回可遍历的(键, 值)元组数组,语法为dict.items()。

In [18]: dict_1
Out[18]: {'name': None, 'age': 24, 'sex': None}
In [19]: print(dict_1.items())
dict_items([('name', None), ('age', 24), ('sex', None)])
In [20]: for key, value in dict_1.items():
    ...:     print(key, value)
    ...:
name None
age 24
sex None

keys()

以列表返回一个字典的一切键:dict.keys()

In [21]: dict_1
Out[21]: {'name': None, 'age': 24, 'sex': None}
In [22]: print(dict_1.keys())
dict_keys(['name', 'age', 'sex'])

values()

以列表情势返回字典中的一切值:dict.values()

In [27]: dict_1
Out[27]: {'name': None, 'age': 24, 'sex': None, 'sub_name': 'Tony'}
In [28]: print(dict_1.values())
dict_values([None, 24, None, 'Tony'])
setdefault()
和get()相似,用户获得与给顶尖相干联的值,差别的是,该要领假如键不存在时会增加键并将值设为默认值,语法为:dict.setdefault(key, default=None)。
In [23]: dict_1
Out[23]: {'name': None, 'age': 24, 'sex': None}
In [24]: print(dict_1.setdefault('name'))
None
In [25]: print(dict_1.setdefault('name', 'Tony'))
None
In [26]: print(dict_1.setdefault('sub_name', 'Tony'))
Tony
In [27]: dict_1
Out[27]: {'name': None, 'age': 24, 'sex': None, 'sub_name': 'Tony'}

update()

语法为:dict_1.update(dict_2),用于把dict_2的键值对更新到dict_1中,假如有雷同的键会被掩盖。

In [31]: dict_1
Out[31]: {'name': None, 'age': 24, 'sex': None, 'sub_name': 'Tony'}
In [32]: dict_2
Out[32]: {'name': 'Mary', 'age': 18, 'sex': None, 'sub_name': ''}
In [33]: dict_1.update(dict_2)
In [34]: dict_1
Out[34]: {'name': 'Mary', 'age': 18, 'sex': None, 'sub_name': ''}

clear()

删除字典中的一切项,dict.clear(),举个例子:

In [1]: dict_1 = dict(name="Tony", age=24)
In [2]: dict_2 = dict_1
In [3]: print(dict_2)
{'name': 'Tony', 'age': 24}
In [4]: dict_2.clear()
In [5]: dict_2
Out[5]: {}
In [6]: dict_1
Out[6]: {}

copy()

浅拷贝原始字典,返回一个具有雷同键值对的新字典,dict.copy(),举个例子:

In [1]: dict_1 = dict(name='Tony', info=['boy', 24])
In [2]: dict_3 = dict_1.copy()
In [3]: dict_3['name'] = "Ring"
In [4]: dict_3['info'].remove('boy')
In [5]: dict_3
Out[5]: {'name': 'Ring', 'info': [24]}
In [6]: dict_1
Out[6]: {'name': 'Tony', 'info': [24]}

fromkeys()

建立一个新字典,dict.fromkeys(seq[, value]),以序列seq中的元素做字典的键,value为字典一切键对应的初始值,个中value为可选参数, 默以为None。适用于数据初始化,举个例子:

In [1]: info = ['name', 'age', 'sex']
In [2]: dict_1 = dict.fromkeys(info)
In [3]: dict_1
Out[3]: {'name': None, 'age': None, 'sex': None}

罕见操纵

兼并字典

有四种体式格局:

通例处置惩罚

In [15]: dict_1
Out[15]: {'Tony': 24}
In [16]: dict_2
Out[16]: {'ben': 18}
In [17]: dict3 = dict()
In [18]: for key, value in dict_1.items():
    ...:     dict_3[key] = value
    ...:
In [19]: for key, value in dict_2.items():
    ...:     dict_3[key] = value
    ...:
In [20]: dict_3
Out[20]: {'Tony': 24, 'ben': 18}

update()

In [9]: dict_1
Out[9]: {'Tony': 24}
In [10]: dict_2
Out[10]: {'ben': 18}
In [12]: dict_3 = dict_1.copy()
In [13]: dict_3.update(dict_2)
In [14]: dict_3
Out[14]: {'Tony': 24, 'ben': 18}

借助字典的dict(d1, **d2)要领

In [33]: dict_1
Out[33]: {'Tony': 24}
In [34]: dict_2
Out[34]: {'ben': 18}
In [35]: dict_3 = dict(dict_1, **dict_2)
In [36]: dict_3
Out[36]: {'Tony': 24, 'ben': 18}

进阶

字典推导式

和列表推导式相似,长处是底层用C完成,会快许多,引荐运用。

对调字典的键值

运用字典推导式能够轻松对调一个字典的键值:

In [42]: dict_4
Out[42]: {24: 'Tony', 18: 'ben'}
In [43]: dict_3
Out[43]: {'Tony': 24, 'ben': 18}
In [44]: dict_4 = {k:v for v, k in dict_3.items()}
In [45]: dict_4
Out[45]: {24: 'Tony', 18: 'ben'}

从字典中提取子集

想建立一个字典,其自身是另一个字典的子集。

举个例子:

In [88]: a = {'Ben': 18, 'Jack': 12, 'Ring': 23, 'Tony': 24}
In [89]: b = {k:v for k, v in a.items() if v > 18}
In [90]: b
Out[90]: {'Ring': 23, 'Tony': 24}

生成有序字典

在Python3.6之前的字典是无序的,然则有时候我们需要坚持字典的有序性,orderDict能够在dict的基础上完成字典的有序性,这里的有序指的是依据字典key插进去的递次来分列,如许就完成了一个先进先出的dict,当容量超越限定时,先删除最早增加的key。

举例:

In [49]: from collections import OrderedDict
In [50]: ordered_dict = OrderedDict([('a', 2), ('b', 4), ('c', 5)])
In [51]: for key, value in ordered_dict.items():
    ...:     print(key, value)
    ...:
a 2
b 4
c 5

能够看到OrderedDict是依据字典建立时的插进去递次来排序。

道理:OrderedDict内部保护了一个双向链表,它会依据元素到场的递次来分列键的位置,这也就致使OrderedDict的大小是一般字典的2倍多。

兼并列表中key雷同的字典

也就是生成所谓的一键多值字典,需要将对应的多个值保留在别的容器比方列表或鸠合,取决于多值是不是需要保证唯一性。

举个例子:

In [64]: from collections import defaultdict
In [65]: a = [{'a': 1}, {'b': 3}, {'c': 4}, {'a':5}, {'b':2}, {'b': 4}]
In [66]: b = defaultdict(list)
In [67]: [b[k].append(v) for item in a for k, v in item.items()]
Out[67]: [None, None, None, None, None, None]
In [68]: b
Out[68]: defaultdict(list, {'a': [1, 5], 'b': [3, 2, 4], 'c': [4]})
In [69]: b['a']
Out[69]: [1, 5]

寻觅两个字典的异同

场景:寻觅两个字典中的异同,包含雷同的键或许雷同的值。

剖析:字典是一系列键值之间的映照鸠合,有以下特性:

keys()会返回字典中的一切键,而且字典的键是支撑鸠合操纵的,所以应用鸠合的交织并补即可对字典的键举行处置惩罚;

items()返回(key, value)构成的对象,支撑鸠合操纵;

values()并不支撑鸠合操纵,由于并不能保证一切的值是唯一的,然则假如必需要推断操纵,能够先将值转化为鸠合来完成。

举例:

In [78]: a = {'a':1, 'b':2, 'c':3}
In [79]: b = {'b':3, 'c':3, 'd':4}
In [80]: a.keys() & b.keys()
Out[80]: {'b', 'c'}
In [81]: a.keys() - b.keys()
Out[81]: {'a'}
In [82]: a.items() & b.items()
Out[82]: {('c', 3)}

再举一个例子,在建立一个字典时,希冀能够去除某些键:

In [85]: a
Out[85]: {'a': 1, 'b': 2, 'c': 3}
In [86]: c = {k: a[key] for k in a.keys() - {'b'}}
In [87]: c
Out[87]: {'a': 3, 'c': 3}

本文来自 python教程 栏目,迎接进修!

以上就是Python字典中你必需晓得的用法的细致内容,更多请关注ki4网别的相干文章!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
Python字典中你必需晓得的用法_后端开发

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>