8.19 字典

字典是python中一种非常重要的数据结构。传统的列表是有顺序的一种集合,通过位置来进行索引。而字典是一种无序的集合,且通过名字来索引。字典包含一对键值对(key-value pairs)。 字典与perl语言中的哈希(hash)数据结构比较类似。哈希(hash)也叫作散列表,其实二者本质上是一样的,字典通过哈希表来存储数据,而读取的时候也是通过哈希表来获取对应的值。 字典这种数据结构更接近于现实世界,因为对于比较大的数据,使用位置索引来检索很难实现。例如一个学校上千名同学,没有顺序,每一个人都是唯一的,考虑到姓名有重复,可以使用学号作为字典的键,学号是唯一的。而每个同学的信息,例如姓名,性别,考试成绩等都可以作为值来存储。 基因组数据也特别适合存储为字典,每一个序列ID是唯一的,作为字典的键,而每个序列ID对应的序列信息存储为值。 根据上面字典的定义,我们总结一下字典的特点:

  • 字典没有顺序;

  • 字典的键必须是唯一的,最好使用一个标量作为键,也可以使用元组,不使用列表等作为键;

  • 字典的值可以重复,且可以存储多个值,例如可以使用一个列表作为字典的值;

1 创建字典

# 创建一个空字典
empty_dict = {}
empty_dict = dict()

# 向字典中添加元素
empty_dict['A'] = 1
empty_dict['B'] = 2
empty_dict['C'] = 3
empty_dict['D'] = 4
empty_dict['E'] = 5

print(empty_dict)

# 直接使用大括号创建,键对值之间用分号分隔
my_dict = {
    'A' : 1,
    'B' : 2,
    'C' : 3,
    'D' : 4,
    'E' : 5
    }
print(my_dict)


# 使用dict函数创建
a = dict(A=1, B=2, C=3)
b = dict([('A', 1), ('B', 2), ('C', 3)])
c = dict({'C': 3, 'A': 1, 'B': 2})
d = dict({'A': 1, 'C': 3}, B=2)

print(a, b, c, d)


# 通过zip函数,将两个列表合并为字典
keys = ['A', 'B', 'C']
values = [1, 2, 3]
my_dict = dict(zip(keys, values))
print(my_dict)

# 循环遍历直接保存为字典
my_dict = { i : 2*i for i in range(3)}
print(my_dict)

通常是从文件中读取数据,然后存储到字典这种数据结构中。

# 读入文件,存入字典

f_object = open('statex77.csv')
header = f_object.readline()
# print(header)

my_dict = {}
for line in f_object:
    my_list = line.strip().split(',')
    my_key = my_list.pop(0)
    my_value = my_list
    my_dict[my_key] = my_value

f_object.close()
print(my_dict)

2 字典属性与方法

# 字典数行与方法
>>> my_dict = {'A' : 1, 'B' : 2, 'C' : 3, 'D' : 4, 'E' : 5}
>>> print(dir(my_dict))

['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

下面案例展示字典的一些操作。

# 创建字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
 
# 添加元素
my_dict['career']= 'teacher'

# 索引元素
print(my_dict['age'])

#删除元素
del my_dict['career']

# 删除字典
del my_dict
# 清空字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
my_dict.clear()

# 获取全部键
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
keys = my_dict.keys()
print(keys)

# 获取全部值
values = my_dict.values()
print(values)

# 同时返回键对值
print(my_dict.items())
new_dict = {key: value for key, value in my_dict.items()}
print(new_dict)

# get获取值
print(my_dict.get('age'))
# 更新值
my_dict.update({'age' : 35}) 
print(my_dict['age'])