python字典和集合

python字典和集合,第1张

概述python字典集合一、字典1.字典特性介绍字典在Python中极为重要,是属于映射类型的数据结构。字典有一对儿大括号组成{},字典内的元素都是成对儿出现的{"a":1},他们用英文的冒号(:)隔开,左边叫做键(key),右边的叫值(value),通常叫做键值对儿。每个元素用英文 python字典和集合一、 字典1. 字典特性介绍

字典在 Python 中极为重要,是属于映射类型的数据结构。
字典有一对儿大括号组成 {},
字典内的元素都是成对儿出现的 {"a": 1}, 他们用英文的冒号(:)隔开, 左边叫做键(key),右边的叫值(value), 通常叫做键值对儿。
每个元素用英文的逗号 (,) 隔开 {"a": 1, "b": 2}

2. 创建字典

创建字典可以使用一对儿大括号, 也可以使用 dict()

>>> d1 = {}>>> type(d1)<class 'dict'>>>> d2 = dict()>>> type(d2)<class 'dict'>>>> d3 = {"size": 8096}>>>
3. 字典的 key 和 value3.1 字典的 key

在一个字典中,key 不允许有重复

>>> {"a": 1, "a": 10}{'a': 10}

并且必须是 python 中不可变的数据类型
如:
整型 浮点型 布尔值 字符串 元组

>>> {1: "整型", 1.1: "浮点型", False: "布尔值", "abc": "字符串", (1,2): "元组" }{1: '整型', 1.1: '浮点型', False: '布尔值', 'abc': '字符串', (1, 2): '元组'}>>>

最常用的是字符串,因为比较容易有语意,易读

>>> {"user": "shark", "age": 18}{'user': 'shark', 'age': 18}>>>
3.2 字典中的 value

字典中的 value 可以是 Python 中任意的一个数据对象:

整型、浮点型、布尔值、字符串、列表、元组、字典、函数对象
>>> {'port': 3306, "height": 1.81, 'stat': True, "name": "dbserver"}{'port': 3306, 'height': 1.81, 'stat': True, 'name': 'dbserver'}>>> {"MysqL-01": {...     "cpu": 4,...     "memroy": [4096,4096]...     }... }{'MysqL-01': {'cpu': 4, 'memroy': [4096, 4096]}}>>>
函数对象等
>>> def foo():...     print("hello")...>>> {"1": foo}{'1': <function foo at 0x10f5b9e18>}
4. 获取字典中的 key 和 value4.1 检查字典中是否存在某个 key

可以使用 in 关键字

>>> d = {"a": 1, "b": 2}>>> 'a' in dTrue>>> 'c' in dFalse>>>
4.2 使用 [] 获取指定 key 的 value
In [48]: d = {"a": 1, "b": 2}In [49]: d['a']Out [49]: 1

这种方式是非常的高效做法,推荐使用。
但是有个问题,假设获取字典中不存在的 key 的值

4.3 使用字典的 get() 方法
>>> dic = {'a': 1, 'b': 2}>>> dic.get('a')    # 获取到 'a' 对应的值(value)1>>>>>> dic.get('c')    # key 不存在字典中,则返回 None>>>>>> v = dic.get('c')>>> type(v)<class 'nonetype'>>>> dic.get('c', '5')  # key 不存在,返回指定的值'5'>>>
4.4 循环字典的 key 和 value

字典对象的 items() 方法会获取到字典的 key 和 value, 它是一个可迭代对象

In [49]: dic_map.values()Out[49]: dict_values(['manufacturer', 'pod_name', 'sn'])In [50]: for k, v in dic_map.items():    ...:     print(k, v)Manufacturer manufacturerProduct name pod_nameSerial Number snIn [51]:
字典取值:

1 列表中嵌套字典的循环取值

d1 = [  {"host": "db_server", "ip": '192.168.1.100'},  {"host": "web_server", "ip": '192.168.2.200'}]for host in d1:    host_name = host.get("host")    host_ip = host["ip"]("主机名", host_name, "主机 IP", host_ip)

2 字典中嵌套字典取值

d2 = {"db_server": {"cpu": "i5", "ip": "192.168.1.100"},"web_server": {"cpu": "i7", "ip": "192.168.2.200"}}for host, info in d2.items():    cpu = info["cpu"]    ip = info['ip']    msg = host + "的 cpu 是", cpu, "IP 是", ip    print(msg)
4.5 向字典中添加键值对[] 方式
>>> info = {}>>> info["cpu"] = 4>>> info["memory"] = [4096, 4096]>>> info{'cpu': 4, 'memory': [4096, 4096]}>>>

循环中添加字段键值对

In [1]: from subprocess import getoutputIn [2]: cmd = "dmIDecode -qt 1"In [3]: ret = getoutput(cmd)In [4]: retOut[4]: 'System information\n\tManufacturer: Smdbmds\n\tProduct name: KVM\n\tVersion: 3.0\n\tSerial Number: d7944669-3028-4617-8fc2-9cd3e04aad59\n\tUUID: d7944669-3028-4617-8fc2-9cd3e04aad59\n\tWake-up Type: Power Switch\n\tSKU Number: Not SpecifIEd\n\tFamily: Smdbmds\n'In [5]: ret.splitlines()Out[5]:['System information',  # 注意这里没有冒号 :, 其他的有 '\tManufacturer: Smdbmds',  # 注意这里前面有 Tab 键,到时候需要处理一下 '\tProduct name: KVM', '\tVersion: 3.0', '\tSerial Number: d7944669-3028-4617-8fc2-9cd3e04aad59', '\tUUID: d7944669-3028-4617-8fc2-9cd3e04aad59', '\tWake-up Type: Power Switch', '\tSKU Number: Not SpecifIEd', '\tFamily: Smdbmds']In [6]: for line in ret.splitlines():   ...:     if ':' in line:   ...:         k, v = line.split(": ")   ...:         print(k, v)   ...:	Manufacturer Smdbmds	Product name KVM	Version 3.0	Serial Number d7944669-3028-4617-8fc2-9cd3e04aad59	UUID d7944669-3028-4617-8fc2-9cd3e04aad59	Wake-up Type Power Switch	SKU Number Not SpecifIEd	Family Smdbmds    In [8]: prod_info = {}   ...: for line in ret.splitlines():   ...:     if ':' in line:   ...:         k, v = line.split(": ")   ...:         # 去除前面的 \t tab 键   ...:         k = k.strip()   ...:         if k == "Manufacturer":   ...:             prod_info["manufacturer"] = v   ...:         elif k == "Product name":   ...:             prod_info["prod_name"] = v   ...:         elif k == "Serial Number":   ...:             prod_info["sn"] = v   ...:   ...:In [9]: pod_infoOut[9]:{'manufacturer': 'Smdbmds', 'prod_name': 'KVM', 'sn': 'd7944669-3028-4617-8fc2-9cd3e04aad59'}
update 方式
>>> disk = {"disk": [10240]}>>> info.update(disk)>>> info{'cpu': 4, 'memory': [4096, 4096], 'disk': [10240]}>>>
4.6 字典的编程之道:用字典实现 case 语句

程序源码

data = {    "0": "zero",    "1": "one",    "2": "two",}while True:    arg = input(">>:")    v = data.get(arg, "nothing")    print(v)

执行程序

$ python3 hello.py>>:0zero>>:1one>>:9nothing>>:
二、 集合1 集合特性介绍
在 python 中集合看起来像是只有 key 的字典{'disk','cpu','memory','motherboard'}在 python 解释器中表现为 set集合内的元素不允许重复
2. 高效创建集合和转换

set()

>>> s1 = set()>>> type(s1)<class 'set'>>>>

转换

In [99]: set('disk')Out[99]: {'d', 'i', 'k', 's'}In [100]: set(['disk','cpu','memory'])Out[100]: {'cpu', 'disk', 'memory'}In [101]: set(('disk','cpu','memory'))Out[101]: {'cpu', 'disk', 'memory'}In [102]: set({'disk': '560G','cpu': '4'})Out[102]: {'cpu', 'disk'}
3. 集合运算& 交集

获取两个集合都有的元素

In [55]: s1 = {"192.168.1.51",  "192.168.1.45"}In [56]: s2 = {"192.168.1.51", "192.168.1.78"}In [57]: s1 & s2Out[57]: {'192.168.1.51'}
|并集

把两个集合的元素合并在一起,产生一个新的集合

In [60]: s1 | s2Out[60]: {'192.168.1.45', '192.168.1.51', '192.168.1.78'}
-差集

返回第一个集合中独有的元素。
就是只保留在第一个集合中出现并且不在第二个集合中出现的元素。

In [55]: s1 = {"192.168.1.51", "192.168.1.45"}In [56]: s2 = {"192.168.1.78", "192.168.1.51"}In [61]: s1 - s2Out[61]: {'192.168.1.45'}In [62]: s2 - s1Out[62]: {'192.168.1.78'}

^异或运算

获取两个集合的分别独有的元素,组合为一个新的集合对象。

In [55]: s1 = {"192.168.1.51", "192.168.1.45"}In [56]: s2 = {"192.168.1.78", "192.168.1.51"}In [63]: s1 ^ s2Out[63]: {'192.168.1.45', '192.168.1.78'}
总结

以上是内存溢出为你收集整理的python字典和集合全部内容,希望文章能够帮你解决python字典和集合所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1188677.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存