在 Shell 中,数组有 2 种类型,普通数组和关联数组,两者的区别就是普通数组的索引是默认的数字索引,而关联数组的索引是可以自定义的任意字符串作索引。

本文中要提到的字典就就是和 Shell 关联数组一样的形式。

Shell 关联数组的特点是索引可以是字符串,字典也是同样的特点。

定义字典

字典定义方式与 Shell 关联数组是不一样的,采用了键值对的形式,且使用 { } 来定义。

如:定义一个人的信息

message = {'name': 'FeiYi', 'sex': 'man', 'age': '25'}
print('我叫' + message['name'] + ',今年' + message['age'] + '岁,' + '很' + message['sex'])
---
# 运行结果
我叫FeiYi,今年25岁,很man

键值对是两个相关联的值,与键相关联的值,可以是数字、字符串、列表、乃至字典,可以将任何 Python 对象用作字典中的值。

当定义字典较多时,可以使用一下格式,最后一个键值对加逗号是因为方便后续接入新的键值对

message = {
    'name': 'FeiYi', 
    'sex': 'man', 
    'age': '25',
    }

添加键值对

message = {}
message['name'] = 'FeiYi'
message['age'] = '25'
print(message)
---
# 运行结果
{'name': 'FeiYi', 'age': '25'}

修改键值对

message = {'name': 'FeiYi', 'sex': 'man', 'age': '25'}
print(message)
message['age'] = '26'
print(message)
---
# 运行结果
{'name': 'FeiYi', 'sex': 'man', 'age': '25'}
{'name': 'FeiYi', 'sex': 'man', 'age': '26'}

删除键值对

message = {'name': 'FeiYi', 'sex': 'man', 'age': '25'}
print(message)
del message['sex']
print(message)
---
# 运行结果
{'name': 'FeiYi', 'sex': 'man', 'age': '25'}
{'name': 'FeiYi', 'age': '25'}

遍历字典

前面的信息中,发现只有获取到键值对中的值,无法获取键,字典也可能存在大量的数据,Python 也对字典支持多种遍历方式。

遍历字典中的键和值

方法 items() 返回的是元组或数组类型,用于方便遍历

message = {
    'name': 'FeiYi', 
    'sex': 'man', 
    'age': '25',
    }

for key,value in message.items():
    print("\nKey: " + key)
    print("Value: " + value)

print(message.items())
---
# 运行结果
Key: name
Value: FeiYi

Key: sex
Value: man

Key: age
Value: 25

dict_items([('name', 'FeiYi'), ('sex', 'man'), ('age', '25')])

在普通的 for 循环中,一般只声明一个变量,如 for i in,而对于字典来说,要想遍历的键和值,就需要用都两个变量,不需要必须是以上的 key,value ,可以是任意两个觉着有意义的变量名,前者为键,后者为值。

遍历字典中的键

方法 keys() 以列表形式返回字典中的所有键名

message = {
    'name': 'FeiYi', 
    'sex': 'man', 
    'age': '25',
    }

print(message.keys())
---
# 运行结果
dict_keys(['name', 'sex', 'age'])

重新举例:有几个朋友,每个朋友精通的技术不同

proficient_technology = {
    'Runzi': 'Kubernetes',
    'Jin': 'Python',
    'San': 'PhotoShop',
    'JinFeng': 'Kuaiji',
    }
friends = ['JinFeng', 'Runzi']

for name in proficient_technology.keys():
    print(name)
    if name in friends:
        print('  ' + name + '精通的技术是:' + proficient_technology[name])
---
# 运行结果
Runzi
  Runzi精通的技术是:Kubernetes
Jin
San
JinFeng
  JinFeng精通的技术是:会计

在遍历部分不使用 keys() 方法的结果也是一样的。

字典中获取键值是无序的,要想以特定的顺序获取键值,可以使用方法 sorted() 按键名的字母顺序临时排序,如 sorted(proficient_technology.keys())

遍历字典中的值

方法 values() 同样以列表形式返回字典中的所有值

proficient_technology = {
    'Runzi': 'Kubernetes',
    'Jin': 'Python',
    'San': 'PhotoShop',
    'JinFeng': '会计',
    }
print(proficient_technology.values())

for technology in proficient_technology.values():
    print(technology)
---
# 运行结果
dict_values(['Kubernetes', 'Python', 'PhotoShop', '会计'])

Kubernetes
Python
PhotoShop
会计

以上的做法可以提取出所有的值,表示你的朋友精通的所有技能,如果有人的精通技能重复,且数据量大时,最终结果会出现很多重复值,为提出重复项,可使用集合 set() 达到去重的目的,集合类似于列表,但每个元素必须是独一无二的。

proficient_technology = {
    'Runzi': 'Kubernetes',
    'Jin': 'Python',
    'San': 'PhotoShop',
    'JinFeng': '会计',
    'FeiYi': 'Kubernetes',
    }

print(proficient_technology.values())
print(set(proficient_technology.values()))
---
# 运行结果
dict_values(['Kubernetes', 'Python', 'PhotoShop', '会计', 'Kubernetes'])
{'会计', 'Python', 'Kubernetes', 'PhotoShop'}

练习

prog = {
    'Shell': '用户使用 Linux 的桥梁',
    'C': '面向过程式的计算机程序设计语言',
    'C#': '面向对象的编程语言',
    'Python': '解释型、高级和通用的编程语言',
    'Java': '高级程序设计语言',
    }

for lang,desc in prog.items():
    print(lang + '语言是' + desc)
---
# 运行结果
Shell语言是用户使用 Linux 的桥梁
C语言是面向过程式的计算机程序设计语言
C#语言是面向对象的编程语言
Python语言是解释型、高级和通用的编程语言
Java语言是高级程序设计语言
proficient_technology = {
    'Runzi': 'Kubernetes',
    'Jin': 'Python',
    'San': 'PhotoShop',
    'JinFeng': '会计',
    'FeiYi': 'Kubernetes',
    }

name_list = ['FeiYi', 'JinFeng', 'Mi', '8k']

for name in name_list:
    if name in proficient_technology.keys():
        print('你好,' + name + '感谢接受调查')
    else:
        print(name + ',邀请您一起接受调查')
---
# 运行结果
你好,FeiYi感谢接受调查
你好,JinFeng感谢接受调查
Mi,邀请您一起接受调查
8k,邀请您一起接受调查

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0