返回列表 发帖

字典

字典是Python中唯一内建的映射类型;

键值对(key:value);字典的值(value)存储在键(key)里;字典的值、键都可以是字符串、整数、浮点数;



操作系统的版本信息:
[root@centos6 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@centos6 ~]#
[root@centos6 ~]# uname -r
2.6.32-696.el6.x86_64

Python的版本信息:
[root@centos6 ~]# python3 --version
Python 3.6.8



######

例子一:

[root@centos6 ~]# cat xx.py
#coding=utf-8

dict_1 =  {'name': 'zhuohua', 'age': 18, 'address': 'China'} #字典

print('个人详细信息:',dict_1)
d = len(dict_1)
print(f"这个字典有{d}个键值对,键值对之间用逗号隔开")

print("-" * 10)
print(dict_1['name'])
print(type(dict_1['name']))

print(dict_1['age'])
print(type(dict_1['age']))

print(dict_1['address'])
print(type(dict_1['address']))

print("-" * 10)
a = f"{dict_1['name']}今年{dict_1['age']}岁,住在{dict_1['address']}。"
print(a)


脚本运行的结果:
[root@centos6 ~]# python3 xx.py
个人详细信息: {'name': 'zhuohua', 'age': 18, 'address': 'China'}
这个字典有3个键值对,键值对之间用逗号隔开
----------
zhuohua
<class 'str'>
18
<class 'int'>
China
<class 'str'>
----------
zhuohua今年18岁,住在China。
[root@centos6 ~]#



######

例子二:

[root@centos6 ~]# cat xx.py
#coding=utf-8

a_1 = 'zhuohua'
a_2 = 98

b_1 = 'Python'
b_2 = 70

c_1 = '小明'
c_2 = 60

dict_1 = {a_1: a_2, b_1: b_2, c_1: c_2} #字典
print(dict_1)

print("-" * 10)

print("以下是成绩大于或等于70的用户:")

if dict_1[a_1] >= 70:
        print(a_1)

if dict_1[b_1] >= 70:
        print(b_1)

if dict_1[c_1] >= 70:
        print(c_1)


脚本运行的结果:
[root@centos6 ~]# python3 xx.py
{'zhuohua': 98, 'Python': 70, '小明': 60}
----------
以下是成绩大于或等于70的用户:
zhuohua
Python
[root@centos6 ~]#



######

例子三:

[root@centos6 ~]# cat xx.py
#coding=utf-8

list_1 = ['zhuohua','Python','小明'] #列表
list_2 = [98,70,60]

dict_1 = dict(zip(list_1,list_2)) #使用dict()函数,把两个列表做成一个字典

print(dict_1)

print("-" * 10)

print("以下是成绩大于或等于70的用户:")

fields_1 = dict_1

K_1 = 70 #关键字

for Key_1 in fields_1:
        if K_1 > fields_1[Key_1]:
                continue #跳过当前这次for循环,继续下一轮for循环
        print(Key_1)
        #print(fields_1[Key_1])       


脚本运行的结果:
[root@centos6 ~]# python3 xx.py
{'zhuohua': 98, 'Python': 70, '小明': 60}
----------
以下是成绩大于或等于70的用户:
zhuohua
Python
[root@centos6 ~]#



######

例子四:

[root@centos6 ~]# cat xx.py
#coding=utf-8

tuple_1 = (1,2,3) #元组
tuple_2 = ('zhuohua','Python',16.8) #元组

dict_1 = dict(zip(tuple_1,tuple_2)) #使用dict()函数,把两个元组做成一个字典
print(dict_1)

print("-" * 10)

Key_1 = input("请输入一个1到3之间的整数:")

if int(Key_1) == 1:
        print(dict_1[1])
        print(type(dict_1[1]))

elif int(Key_1) == 2:
        print(dict_1[2])
        print(type(dict_1[2]))
       
elif int(Key_1) == 3:
        print(dict_1[3])
        print(type(dict_1[3]))
       
else:
        print('请输入正确数字')


多次运行脚本的结果:
[root@centos6 ~]# python3 xx.py
{1: 'zhuohua', 2: 'Python', 3: 16.8}
----------
请输入一个1到3之间的整数:1
zhuohua
<class 'str'>
[root@centos6 ~]#
[root@centos6 ~]# python3 xx.py
{1: 'zhuohua', 2: 'Python', 3: 16.8}
----------
请输入一个1到3之间的整数:2
Python
<class 'str'>
[root@centos6 ~]#
[root@centos6 ~]# python3 xx.py
{1: 'zhuohua', 2: 'Python', 3: 16.8}
----------
请输入一个1到3之间的整数:3
16.8
<class 'float'>
[root@centos6 ~]#
[root@centos6 ~]# python3 xx.py
{1: 'zhuohua', 2: 'Python', 3: 16.8}
----------
请输入一个1到3之间的整数:4
请输入正确数字
[root@centos6 ~]#



######

例子五:

[root@centos6 ~]# cat xx.py
#coding=utf-8

def func1():
        num  = 16 / 8
        return num
       
def func2():
        num  = 16 / 2
        return num
       
def func3():
        num  = 16 / 4
        return num

if __name__ == '__main__':

        dict_1 = {'A区':func1(),'B区':func2(),'C区':func3()} #此时所有函数都已经依次执行过了

        print('A区的结果为',dict_1['A区'])
        print('B区的结果为',dict_1['B区'])
        print('C区的结果为',dict_1['C区'])


脚本运行的结果:
[root@centos6 ~]# python3 xx.py
A区的结果为 2.0
B区的结果为 8.0
C区的结果为 4.0
[root@centos6 ~]#





############
############

测试所使用的文件:
[root@centos6 ~]# cat /root/1.log
文件系统             容量  已用  可用 已用% 挂载点
devtmpfs             883M     0  883M    0% /dev
tmpfs                901M     0  901M    0% /dev/shm
tmpfs                901M   33M  868M    4% /run
tmpfs                901M     0  901M    0% /sys/fs/cgroup
/dev/mapper/cl-root   76G  3.5G   73G    5% /
/dev/nvme0n1p1       190M  141M   36M   80% /boot
tmpfs                181M     0  181M    0% /run/user/0
/dev/sr0             7.7G  7.7G     0  100% /mnt/cdrom
[root@centos6 ~]#



###

例子六:

[root@centos6 ~]# cat xx.py
#coding=utf-8

Path_1 = "/root/1.log"
f_name = open(Path_1,'r') #读取文件内容
list_1 = f_name.readlines() #输出结果为列表,连换行符也会显示出来
f_name.close()

list_2 = ['A区','B区','C区','D区','E区','F区','G区','H区','I区']

dict_1 = dict(zip(list_2,list_1)) #使用dict()函数,把两个列表做成一个字典

print(dict_1)

print("-" * 10)

fields_1 = dict_1

K_1 = "/dev/nvme0n1p1"  #关键字,区分英文字母大小写

for Key_1 in fields_1:
        if fields_1[Key_1].startswith(K_1): #判断数据是不是以关键字开头
                pass
                break #只是结束整个for循环,不是结束程序

print(Key_1)
print(f"{Key_1}是以关键字'/dev/nvme0n1p1'开头")
               

Key_2 = fields_1[Key_1].split()[4] #以空格为分隔符进行分割后,再输出第5项
print(f"{Key_1}的使用率为{Key_2}")

print("-" * 10)

Key_3 = Key_2[:-1] #去掉最后1个字符
print(Key_3)
print(type(Key_3))

Key_4 = int(Key_3) #转换为整数
print(Key_4)
print(type(Key_4))


脚本运行的结果:
[root@centos6 ~]# python3 xx.py
{'A区': '文件系统             容量  已用  可用 已用% 挂载点\n', 'B区': 'devtmpfs             883M     0  883M    0% /dev\n', 'C区': 'tmpfs                901M     0  901M    0% /dev/shm\n', 'D区': 'tmpfs                901M   33M  868M    4% /run\n', 'E区': 'tmpfs                901M     0  901M    0% /sys/fs/cgroup\n', 'F区': '/dev/mapper/cl-root   76G  3.5G   73G    5% /\n', 'G区': '/dev/nvme0n1p1       190M  141M   36M   80% /boot\n', 'H区': 'tmpfs                181M     0  181M    0% /run/user/0\n', 'I区': '/dev/sr0             7.7G  7.7G     0  100% /mnt/cdrom\n'}
----------
G区
G区是以关键字'/dev/nvme0n1p1'开头
G区的使用率为80%
----------
80
<class 'str'>
80
<class 'int'>
[root@centos6 ~]#



######

例子七:

[root@centos6 ~]# cat xx.py
#coding=utf-8

Path_1 = "/root/1.log"

f_name = open(Path_1,'r') #读取文件内容
list_1 = f_name.readlines() #输出结果为列表,连换行符也会显示出来
f_name.close()

list_2 = ['A区','B区','C区','D区','E区','F区','G区','H区','I区']

dict_1 = dict(zip(list_2,list_1))

fields_1 = dict_1

K_1 = "/dev/nvme0n1p1"  #关键字,区分英文字母大小写
K_2 = "文件系统"  #关键字

print(f"只显示是以关键字'{K_1}'或'{K_2}'开头的自定义区名:")

for Key_1 in fields_1:
        if not fields_1[Key_1].startswith(K_1) and not fields_1[Key_1].startswith(K_2):
                continue #跳过当前这次for循环,继续下一轮for循环
        print(Key_1)
        #print(fields_1[Key_1])


脚本运行的结果:
[root@centos6 ~]# python3 xx.py
只显示是以关键字'/dev/nvme0n1p1'或'文件系统'开头的自定义区名:
A区
G区
[root@centos6 ~]#



######

例子八:

[root@centos6 ~]# cat xx.py
#coding=utf-8

Path_1 = "/root/1.log"

f_name = open(Path_1,'r') #读取文件内容
list_1 = f_name.readlines() #输出结果为列表,连换行符也会显示出来
f_name.close()

list_2 = ['A区','B区','C区','D区','E区','F区','G区','H区','I区']

dict_1 = dict(zip(list_2,list_1))

fields_1 = dict_1

K_1 = "/dev/nvme0n1p1"  #关键字,区分英文字母大小写
K_2 = "文件系统"  #关键字

print(f"只显示不是以关键字'{K_1}'、'{K_2}'开头的自定义区名:")

for Key_1 in fields_1:
        if fields_1[Key_1].startswith(K_1) or fields_1[Key_1].startswith(K_2):
                continue
        print(Key_1)


脚本运行的结果:
[root@centos6 ~]# python3 xx.py
只显示不是以关键字'/dev/nvme0n1p1'、'文件系统'开头的自定义区名:
B区
C区
D区
E区
F区
H区
I区
[root@centos6 ~]#





######

例子九:

[root@centos6 ~]# cat xx.py
#coding=utf-8

Path_1 = "/root/a.log"
f_name = open(Path_1,'r') #读取文件内容
Result_1 = f_name.read() #直接输出文件的全部内容
f_name.close()

Path_2 = "/root/b.log"
f_name = open(Path_2,'r')
Result_2 = f_name.read()
f_name.close()

Path_3 = "/root/c.log"
f_name = open(Path_3,'r')
Result_3 = f_name.read()
f_name.close()

fields_1 = {Path_1: Result_1,Path_2:Result_2, Path_3: Result_3}


K_1 = 'Error'  #关键字,区分英文字母大小写
K_2 = 'False'  #关键字

print(f"只显示内容包含关键字'{K_1}'或'{K_2}'的文件名:")

for Key_1 in fields_1:
        if not K_1 in fields_1[Key_1] and not K_2 in fields_1[Key_1]:       
                continue
        print(Key_1)
       
       
脚本运行的结果:
[root@centos6 ~]# python3 xx.py
只显示内容包含关键字'Error'或'False'的文件名:
/root/a.log
/root/c.log



######

例子十:

[root@centos6 ~]# cat xx.py
#coding=utf-8

Path_1 = "/root/a.log"
f_name = open(Path_1,'r') #读取文件内容
Result_1 = f_name.read() #直接输出文件的全部内容
f_name.close()

Path_2 = "/root/b.log"
f_name = open(Path_2,'r')
Result_2 = f_name.read()
f_name.close()

Path_3 = "/root/c.log"
f_name = open(Path_3,'r')
Result_3 = f_name.read()
f_name.close()

fields_1 = {Path_1: Result_1,Path_2:Result_2, Path_3: Result_3}


K_1 = 'Error'  #关键字,区分英文字母大小写
K_2 = 'False'  #关键字

print(f"只显示内容不包含关键字'{K_1}'、'{K_2}'的文件名:")

for Key_1 in fields_1:
        if K_1 in fields_1[Key_1] or K_2 in fields_1[Key_1]:       
                continue
        print(Key_1)
       
       
脚本运行的结果:
[root@centos6 ~]# python3 xx.py
只显示内容不包含关键字'Error'、'False'的文件名:
/root/b.log
[root@centos6 ~]#





相关文章:
if语句
for循环语句
while循环语句

CentOS8使用Python3脚本管理MSSQL2008R2

join()函数
自定义函数
字符串的截取
文件操作(创建、读取、写入、追加)

Python3检测文件内容中是否包含关键字
Pandas的进阶(三)

返回列表