2014-05-10 18 views
0

我的要求是收集設備對象(具有容量,製造商,帶寬,成本等功能)。我需要能夠找到最大容量的設備。但是由於可能有多個設備具有相同或不同製造商的相同容量,因此我無法將容量用作密鑰。Python元組作爲鍵和對象作爲值

我以爲有元組的容量和模型沒有作爲關鍵,但我選擇的設備基於他們的能力,而不是他們的型號。

 class device: 



       def __init__(self): 
        self.manufacturer  =  "" 
        self.purchasecost  =  "" 
        self.capacity   =  ""  # TB 
        self.power    =  ""  # KWH 
        self.bandwidth   =  ""  # MBPS 
        self.fail_rate   =  "" 
        self.powered_on   =  ""  # % 
        self.lIOPS    =  ""     
        self.device_type  =  "" 
        self.moveincost   =  ""  # % of purchasecost 
        self.moveoutcost  =  ""  # % of purchasecost 
        self.datacentercost  =  "" 
        self.servicelife  =  "" 
        self.model    =  "" 
        pass 

       def setparam(self, device_param): 
        self.manufacturer =  device_param["manufacturer"] 
        self.purchasecost =  device_param["purchasecost"] 
        self.capacity  =  device_param["capacity"] # TB 
        self.power  =  device_param["power"]  # KWH 
        self.bandwidth =  device_param["bandwidth"] # MBPS 
        self.fail_rate =  device_param["fail_rate"] 
        self.powered_on =  device_param["powered_on"] # % 
        self.lIOPS  =  device_param["IOPS"]     
        self.device_type =  device_param["device_type"] 
        self.moveincost =  device_param["moveincost"] # % of purchasecost 
        self.moveoutcost =  device_param["moveoutcost"] # % of purchasecost 
        self.datacentercost = device_param["datacentercost"] 
        self.servicelife =  device_param["servicelife"] 
        self.model  =  device_param["model"] 

在另一個類中,我創建對象並使用它們。

   def available_devices(self): 
       hdd1 = self.createdisk1() 
       hdd2 = self.createdisk2() 
       ssd1 = self.createSSD1() 
       self.availabledevices[hdd1.model]=hdd1 
       print ("Added HDD1 "+str(self.availabledevices[hdd1.model])) 
       self.availabledevices[hdd2.model]=hdd2 
       print ("Added HDD2 "+str(self.availabledevices[hdd2.model])) 

       self.availabledevices[ssd1.model]=ssd1 

      def get_highest_capacity_device(self): 
       sorted_capacities = sorted(self.availabledevices.iterkeys()) 
       highest_capacity = sorted_capacities[len(sorted_capacities) -1] 
       highest_capacity_device = self.availabledevices[highest_capacity] 
       return highest_capacity_device 

此代碼目前使用的容量爲關鍵,但它顯然當有與相同容量的多個設備不工作。我的問題是我應該作爲重點使用,這樣 - 我可以根據自己的能力 我的設備進行排序 - 我可以得到具有一定容量

+0

爲什麼您需要一個唯一的排序鍵?這看起來像是一個設計缺陷。你爲什麼要分類呢?不是簡單的最大搜索足夠? – luk32

+0

「這個代碼目前使用容量作爲關鍵,但當存在多個具有相同容量的設備時,它顯然不工作」 - 您確定嗎?排序應該工作得很好。 – user2357112

+1

如果您正在討論字典鍵而不是排序鍵,爲什麼不把這個值列爲具有該容量的所有設備的列表? – user2357112

回答

3

你爲什麼要使用字典反正所有設備?與簡單列表相比,沒有任何好處:

availabledevices = [ hdd1, hdd2, ssd ] 
highest_capacity_device = max(availabledevices, key=lambda x: x.capacity)