Python——字典

本文详细介绍了Python字典的数据结构、创建方法,以及如何操作键值对,包括检查键是否存在、获取值、添加和更新键值对,以及利用字典实现简单的case语句。
摘要由CSDN通过智能技术生成

一、字典特性介绍

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

二、创建字典

        创建字典可以使⽤⼀对⼉⼤括号, 也可以使⽤ dict()

In [1]: d1 = {}

In [2]: type(d1)
Out[2]: dict

In [3]: d2 = dict()

In [4]: type(d2)
Out[4]: dict

 

三、字典的 key 和 value 

        1、字典的 key

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

In [5]: {"a":1,"a":10}
Out[5]: {'a': 10}

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

In [6]: {1: "整型", 1.1: "浮点型", False: "布尔值", "abc":"字符串", (1,2): "
   ...: 元组" }
Out[6]: {1: '整型', 1.1: '浮点型', False: '布尔值', 'abc': '字符串', (1, 2): '元组'}

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

In [7]:  {"user": "shark", "age": 18}
Out[7]: {'user': 'shark', 'age': 18}

        扩展:python 中认为 1 和 True , 0 和 False 的值是相等的 但不是⼀个对象,因为它们的 id 不同

In [8]: {1: "整型", True: "布尔型"}
Out[8]: {1: '布尔型'}

In [9]: {True: "布尔型", 1: "整型"}
Out[9]: {True: '整型'}

 

        2、字典中的 value 

                字典中的 value 可以是 Python 中任意的⼀个数据对象:整型、浮点型、布尔值、字符串、列表、元组、字典、函数对象等

In [10]: {'port': 3306, "height": 1.81, 'stat': True,"name": "dbserver"}
Out[10]: {'port': 3306, 'height': 1.81, 'stat': True, 'name': 'dbserver'}

In [11]: {"mysql-01": {
    ...:     "cpu":4,
    ...:     "memroy":[4066,4096]
    ...:     }
    ...: }
Out[11]: {'mysql-01': {'cpu': 4, 'memroy': [4066, 4096]}}

 

        函数对象

In [12]: def foo():
    ...:     print("hello")
    ...: 

In [13]: {"1":foo}
Out[13]: {'1': <function __main__.foo()>}

 

四、获取字典中 key 和 value 

        1、检查字典中是否存在某个 key

                可以使⽤ in 关键字

In [14]: dic_map = {
    ...:     "Manufacturer": "manufacturer",
    ...:     "Product Name": "pod_name",
    ...:     "Serial Number": "sn"
    ...: }

In [15]: dic_map
Out[15]: 
{'Manufacturer': 'manufacturer',
 'Product Name': 'pod_name',
 'Serial Number': 'sn'}

In [16]: "Manufacturer" in dic_map
Out[16]: True

In [17]: "Manufactur" in dic_map
Out[17]: False

In [18]: line = '\tManufacturer: Alibaba Cloud'

In [19]: line.strip().split(': ')
Out[19]: ['Manufacturer', 'Alibaba Cloud']

In [20]: k = line.strip().split(': ')[0]

In [21]: k in dic_map
Out[21]: True

 

        2、使⽤ [] 获取指定 key 的 value 

In [22]: dic_map['Manufacturer']
Out[22]: 'manufacturer'

                这种⽅式是⾮常的⾼效做法,推荐使⽤。 但是有个问题,假设获取字典中不存在的 key 的值

        3、使⽤字典的 get() ⽅法

In [27]: dic_map.get('Manufacturer')
Out[27]: 'manufacturer'

In [28]: v = dic_map.get('Manufacturer')

In [29]: v
Out[29]: 'manufacturer'

In [30]: v = dic_map.get('Manufacturerr')

In [31]: v

In [32]: type(v)        # key 不存在字典中,则返回 None
Out[32]: NoneType

In [33]: v = dic_map.get('Manufacturerr', 'key not in')    # key 不存在,返回自定义值

In [34]: v
Out[34]: 'key not in'

 

        4、循环字典的 key 和 value 

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

In [9]: for i in dic_map.items():
   ...:     print(i)
   ...: 
('Manufacturer', 'manufacturer')
('Product Name', 'pod_name')
('Serial Number', 'sn')

In [10]: for i in dic_map.items():
    ...:     k, v = i
    ...:     print(k , v)
    ...: 
Manufacturer manufacturer
Product Name pod_name
Serial Number sn

 

        5、向字典中添加键值对 

                方式一:[] 

In [12]: info = {}

In [13]: info["cpu"] = 4

In [14]: info["memory"] = [4096,4096]

In [15]: info
Out[15]: {'cpu': 4, 'memory': [4096, 4096]}

                        字段映射

In [16]: dic_map
Out[16]: 
{'Manufacturer': 'manufacturer',
 'Product Name': 'pod_name',
 'Serial Number': 'sn'}

In [17]: li = ['Manufacturer: Alibaba Cloud',
    ...:     'Product Name: Alibaba Cloud ECS',
    ...:     'Version: pc-i440fx-2.1',
    ...:     'Serial Number: 0f7e3d86-7742-4612-9f93-e3a9e4754157']

In [18]: prod_info = {}

In [19]: for line in li:
    ...:     print(line)
    ...: 
Manufacturer: Alibaba Cloud
Product Name: Alibaba Cloud ECS
Version: pc-i440fx-2.1
Serial Number: 0f7e3d86-7742-4612-9f93-e3a9e4754157

In [20]: for line in li:
    ...:    print( line.split(': '))
    ...: 
['Manufacturer', 'Alibaba Cloud']
['Product Name', 'Alibaba Cloud ECS']
['Version', 'pc-i440fx-2.1']
['Serial Number', '0f7e3d86-7742-4612-9f93-e3a9e4754157']

In [22]: for line in li:
    ...:    k, v = line.split(': ')
    ...:    if k in dic_map:
    ...:        new_k = dic_map[k]
    ...:        print(new_k,v)
    ...: 
manufacturer Alibaba Cloud
pod_name Alibaba Cloud ECS
sn 0f7e3d86-7742-4612-9f93-e3a9e4754157

In [23]: for line in li:
    ...:    k, v = line.split(': ')
    ...:    if k in dic_map:
    ...:        new_k = dic_map[k]
    ...:        prod_info[new_k] = v        # 获取的⼀个字典的值作为另⼀个字典的键
    ...: 

In [24]: prod_info
Out[24]: 
{'manufacturer': 'Alibaba Cloud',
 'pod_name': 'Alibaba Cloud ECS',
 'sn': '0f7e3d86-7742-4612-9f93-e3a9e4754157'}

 

 

                方式二:update 

In [25]: disk = {"disk": [10240]}

In [26]: info = {}

In [27]: info.update(disk)

In [28]: info
Out[28]: {'disk': [10240]}

In [29]: info.update({'cpu':4})

In [30]: info
Out[30]: {'disk': [10240], 'cpu': 4}

In [31]: info['disk']
Out[31]: [10240]

In [32]: info['disk'][0]
Out[32]: 10240

 

 

        6、字典的编程之道:⽤字典实现 case 语句 

In [45]: !vi some.py     #程序
data = {                   
    "0": "zero",
    "1": "one",
    "2": "two",
    "q": "quit"
}

while True:
    arg = input(">>:")
    v = data.get(arg, "nothing")
    if v == "quit":
        break
    print(v)

In [46]: %run some.py    #执⾏程序
>>:1
one
>>:2
two
>>:3
nothing
>>:4
nothing
>>:q

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值