hello! 大家好,今天为大家推荐几个可以像字典一样处理数据的工具
大家知道python字典dict的特点是key 是唯一的,所以可变数据类型如list,dict是不能成为字典的key的。另外如果存储的数据中有相同值得key, 会直接更新字典的value值。
基于以上,本人在写代码的时候遇到了个python 字典无法解决的问题,key的值不唯一,但又想让指定的数据当key来提高搜索效率。是不是感觉很难,如果不用数据库协助方法实现起来有点天方夜谭。下面开始:
比如现在有个表格,里面存放的是多个集群的信息,包含集群编号,deploy名称,等等信息。现在我想读取整个表格,并且根据集群名称去获取表格中的每个集群以及对应的deployment名称
方法一:通过读取表格,并将数据赋值给字典,通过get字典键的方式获取指定集群的deployment的信息
代码可以这样写
import pandas as pd #导入模块
filePd = pd.read_excel('deploy.xlsx') #导入表格
for index,row in filePd.iterrows():
deployNamespace = {} #设置空字典,存放集群名称:deploy名称
for index, row in filePd.iterrows():
cluster = filePd['集群编号'][index] #根据表格索引获取每行的指定单元格的数据
deployment = filePd['deploy名称'][index]#获取指定的deployment名称
deployNamespace[cluster] = (cluster)
print(deployNamespace.get('集群名'))
好像代码可以哈,但是大家知道,k8s集群中每个集群中会有很多个deployment控制器,假如表格中有多个deployment控制器在同一个集群 ,集群编号就会有重复的情况,那么就不能通过get集群编号的方式获取对应的deployment控制器名称。因为在读取信息的时候字典遇到相同的key值会覆盖掉上一个的赋值。
打脸来的很快,其实用字典也可以实现,以集群名展示他下面所有的deployment名称,代码如下:
方法二:
import pandas as pd #导入模块
filePd = pd.read_excel('deploy.xlsx') #导入表格
for index,row in filePd.iterrows():
deployNamespace = {} #设置空字典,存放集群名称:deploy名称
for index, row in filePd.iterrows():
cluster = filePd['集群编号'][index]
deployment = filePd['deploy名称'][index] #获取指定的deployment名称
if deployNamespace.get(cluster): #如果字典中存在,那么直接追加
deployNamespace[cluster].append(deployment)
else: #如果字典中不存在集群名称,那么直接复制
deployNamespace[cluster] = [deployment]
print(deployNamespace.get('集群名'))
方法三:好了,文章的高潮来了,下面使用numpy模块实现这个功能,
import pandas as pd
import numpy as np
filePd = pd.read_excel('deploy.xlsx')
# 创建一个空的结构化数组
data = np.array([], dtype=[('集群编号', 'U20'), ('deployment名称', 'U20')])
# 要添加的数据列表
for index,row in filePd.iterrows():
cluster = filePd['集群编号'][index]
deploy = filePd['deployment名称'][index]
data = np.append(data, np.array((cluster,deploy), dtype=data.dtype))
print(data[data['name']=='指定集群编号']['deployment名称']) #也可以输出指定集群下所有deploy名称
方法四:可以直接使用pandas读取数据的时候完成这样这样的操作,代码如下:
import pandas as pd
import numpy as np
filePd = pd.read_excel('deploy.xlsx')
# 假设您想根据列'集群编号'的值为'x'来获取对应的列'deployment名称'的值
filtered_data = filePd.loc[filePd['集群编号'] == '指定对应的集群名', 'deployment名称']
print(filtered_data.tolist())
今天的内容到此结束,欢迎大家点赞,关注,收藏,咱们青山不改,绿水长流,下一篇文章继续分析