python之字典和结构化数据

摘要:本文主要介绍了字典数据类型

1、字典数据类型

1.1 从例子入手

首先为了更好的了解一下字典这种数据结构,直接举一个例子,使得我们对其有更加形象的认识:

1 >>> sam={'animal':'cat','color':'green','food':'chicken'}
2 >>> sam['animal']
3 'cat'

上面的这种数据结构的定义方法就是字典:采用了键---值的形式。正如我们现实中运用的字典,查找一个词,后面会跟上这个词的一些含义。并且我们在查找某个词时可以直接用字典名【键】的方式进行索引。

1.2 和列表的比较

列表中的内容是有顺序的,也就是说顺序不同而元素相同的情况下,列表是不同的,而字典则没有顺序的概念,只要元素的个数和名称以及内容是一样的,那么就是同一个字典。

1.3 类方法的使用

当我们定义了一个字典以后,由于字典是没有顺序的,那么我们该如何遍历访问每一个字典的成员呢?

可以用类方法keys()、values()、items()来遍历访问键、值和键-值,具体如下:

 1 >>> sam={'color':'red','num':42,'food':'chicken'}
 2 >>> for v in sam.values():
 3     print(v)
 4 
 5 red
 6 42
 7 chicken
 8 >>> for i in sam.keys():
 9     print(i)
10 
11 color
12 num
13 food
14 >>> for k in sam.items():
15     print(k)
16 
17 ('color', 'red')
18 ('num', 42)
19 ('food', 'chicken')

1.4 检查一个键或值是否在字典中

直接用in,返回布尔值

1 >>> 'apple' in sam.values()
2 False

1.5 get()方法

当我们要检查一个值是否在字典中时,可能会比较麻烦:首先判断该值是否在字典中,如果在才可以显示该值。如果不这样操作,而是直接寻找,那么程序就会崩溃,这就很不方便,于是发明了get()方法:

get()方法有两个参数,第一个是要取得其值的键,第二个是如果不存在时的备用返回值

1 >>> bam={'color':'red','num':42,'food':'chicken'}
2 >>> pos=bam.get('color','there is not')
3 >>> pos
4 'red'
5 >>> bos=bam.get('key','there is not')
6 >>> bos
7 'there is not'

1.6 setdefault()方法

有的时候我们确切地需要一个值,但是这样的一个值又不存在于字典中,那么我们就可以通过setdefault()方法将这样的一个值添加到字典中,添加到字典中以后,如果再次调用这个方法,由于键值已经存在了,新的键值便不会再次添加,也不会再进行更新。如下:

1 >>> bam={'color':'red','num':42,'food':'chicken'}
2 >>> bam.setdefault('name','mike')
3 'mike'
4 >>> bam
5 {'color': 'red', 'num': 42, 'food': 'chicken', 'name': 'mike'}
6 >>> bam.setdefault('name','jone')
7 'mike'
8 >>> bam
9 {'color': 'red', 'num': 42, 'food': 'chicken', 'name': 'mike'}

1.7 漂亮打印

import pprint
message='It was a bright cold day in April,and the clocks were striking thirteen'
count={}
for character in message:
    count.setdefault(character,0)
    count[character]=+2
pprint.pprint(count)

输出结果:

 1 {' ': 2,
 2  ',': 2,
 3  'A': 2,
 4  'I': 2,
 5  'a': 2,
 6  'b': 2,
 7  'c': 2,
 8  'd': 2,
 9  'e': 2,
10  'g': 2,
11  'h': 2,
12  'i': 2,
13  'k': 2,
14  'l': 2,
15  'n': 2,
16  'o': 2,
17  'p': 2,
18  'r': 2,
19  's': 2,
20  't': 2,
21  'w': 2,
22  'y': 2}

关于漂亮打印,主要是引入了pprint模块,这个模块中包含了两个重要的打印方式:pprint()和pformat(),下面的两种方式是等价的:

import pprint
message='It was a bright cold day in April,and the clocks were striking thirteen'
count={}
for character in message:
    count.setdefault(character,0)
    count[character]=+2
pprint.pprint(count)
print(pprint.pformat(count))  #和上一句是等价的  
pprint.pformat(count)   #pformat这种方法并不是显示到屏幕上,而是形成一个字符串保存起来,保存的格式和打印出的格式相同

下面的输出结果是:

 1 {' ': 2,
 2  ',': 2,
 3  'A': 2,
 4  'I': 2,
 5  'a': 2,
 6  'b': 2,
 7  'c': 2,
 8  'd': 2,
 9  'e': 2,
10  'g': 2,
11  'h': 2,
12  'i': 2,
13  'k': 2,
14  'l': 2,
15  'n': 2,
16  'o': 2,
17  'p': 2,
18  'r': 2,
19  's': 2,
20  't': 2,
21  'w': 2,
22  'y': 2}
23 {' ': 2,
24  ',': 2,
25  'A': 2,
26  'I': 2,
27  'a': 2,
28  'b': 2,
29  'c': 2,
30  'd': 2,
31  'e': 2,
32  'g': 2,
33  'h': 2,
34  'i': 2,
35  'k': 2,
36  'l': 2,
37  'n': 2,
38  'o': 2,
39  'p': 2,
40  'r': 2,
41  's': 2,
42  't': 2,
43  'w': 2,
44  'y': 2}

转载于:https://www.cnblogs.com/lzy820260594/p/11535260.html

### Python结构化数组字典的关系及用法 #### 结构化数组的特点 NumPy 的结构化数组是一种强大的工具,允许用户定义复杂的数据类型,并将其应用于多维数组。它类似于 C 或 Fortran 中的结构体,能够存储不同类型的字段[^3]。例如,在 `a=np.loadtxt(...)` 示例中,`dtype` 参数被用来指定每列的不同数据类型。 #### 字典的特点 Python字典是一个键值对容器,提供高效的随机存取能力。它的主要优势在于快速查找动态扩展特性。然而,字典并不适合用于大规模数值计算或固定模式的数据管理[^4]。 --- #### 使用场景对比 | 特性 | **结构化数组** | **字典** | |--------------------------|--------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------| | 数据类型 | 支持多种数据类型组合(如字符串、整数、浮点数),适用于表格型数据 | 键值对形式,键通常是不可变对象(如字符串、元组),值可以是任意类型 | | 性能 | 数值运算速度快,尤其在批量处理时表现优异 | 查找速度极快(O(1) 时间复杂度),但在数值计算方面较慢 | | 存储方式 | 连续内存布局,便于硬件加速 | 动态散列表机制,可能因哈希冲突而增加额外开销 | | 扩展性 | 不易动态修改大小 | 易于增删改查 | --- #### 相互转换方法 ##### 从字典结构化数组 可以通过 NumPy 的 `array` 函数将字典中的数据转化为结构化数组: ```python import numpy as np # 原始字典数据 data_dict = { 'name': ['amy', 'kasa', 'baron'], 'age': [11, 10, 9], 'score': [70.0, 80.0, 66.0] } # 转换为结构化数组 structured_array = np.array( list(zip(data_dict['name'], data_dict['age'], data_dict['score'])), dtype=[('name', 'U10'), ('age', 'i4'), ('score', 'f4')] ) print(structured_array) ``` 上述代码展示了如何将一个包含多个列表的字典转为结构化数组。 ##### 从结构化数组到字典 同样也可以反向操作,将结构化数组还原成字典: ```python # 将结构化数组转回字典 result_dict = {field: structured_array[field].tolist() for field in structured_array.dtype.names} print(result_dict) ``` 此过程利用了结构化数组的字段名作为字典的键。 --- #### 应用实例分析 假设有一个学生评分系统的 CSV 文件,其内容如下: ``` name,age,score amy,11,70 kasa,10,80 baron,9,66 ``` 如果需要频繁执行数值统计,则优先考虑使用结构化数组;但如果更多关注的是单条记录的查询效率,则应选用字典来表示这些数据。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值