让我们说下面有一些字典表示为字典:
cluster1 = {'Disks' : [0,1,2,3,12] , 'left': True , 'right': False}
cluster2 = {'Disks' : [3,4,5,2] , 'left':True ,'right': False }
cluster3 = {'Disks' : [6,7,8,2] , 'left':False ,'right': False }
cluster4 = {'Disks' : [10,11,12] , 'left':True, 'right':True }
Listofclusters = [cluster1,cluster2,cluster3,cluster4]
然后我按上面列出了一些群集来存储它们....
如果我想在列表中搜索特定磁盘,并希望它告诉我列表中的哪些群集有这些磁盘 我该怎么做?
答案 0 :(得分:2)
根据您拥有的数据,我们应该这样做:
def findClusters(n, clusters):
answer = []
for cluster in clusters:
if n in cluster['Disks']:
answer.append(cluster)
return answer
现在,这是一个线性算法。通过一些预处理,您应该能够大大改善运行时间:
def preprocess(clusters):
"""
Given the list of clusters, return a dictionary that maps
Disk numbers to a list of clusters that have that disk
"""
answer = {}
for i,cluster in enumerate(clusters):
for disk in cluster['Disks']
if disk not in answer:
answer[disk] = []
answer[disk].append(i)
return answer
def findClusters(preprocessedData, clusters, diskNum):
answer = []
for clusterid in preprocessedData[diskNum]:
answer.append(clusters[clusterid])
return answer
预处理需要线性时间,而实际搜索需要恒定时间(以查找相关聚类)和线性时间(按找到的聚类数量的顺序)来创建相关聚类列表
答案 1 :(得分:1)
例如,如果您要搜索磁盘10,则可以执行以下操作:
>>> [cluster for cluster in Listofclusters if 10 in cluster['Disks']]
... [{'Disks': [10, 11, 12], 'right': True, 'left': True}]
答案 2 :(得分:1)
根据您的要求:
在列表中搜索特定磁盘,并希望它告诉我 列表中的哪些群集具有这些磁盘
使用以下方法形成一个词典cluster_numbers
,其中的键是 磁盘号 ,值是 群集的列表名称(集群订单号)
让我们找到所有群集名称(数字),其中包含以下列表中的一个或多个磁盘编号[2, 10, 7]
search_disks = [2, 10, 7]
cluster_numbers = {d:[] for d in search_disks}
for d in cluster_numbers.keys():
for k, c in enumerate(Listofclusters):
if d in c['Disks']: cluster_numbers[d].extend(['cluster' + str(k+1)])
print(cluster_numbers)
输出:
{2: ['cluster1', 'cluster2', 'cluster3'], 10: ['cluster4'], 7: ['cluster3']}