2017-05-23 123 views
0

請糾正我的代碼通過迭代在Python類變量

PS - 我是相當新的Python

class Contact: 
    def __init__(self,cid, email): 
     self.cid=cid 
     self.email=email 
def ind(contacts): 
    index={} 
    #Code here 
    return index 
contacts = [Contact(1,'a'), 
     Contact(2,'b'), 
     Contact(3,'c'), 
     Contact(4,'a')] 
print(ind(contacts)) 

需要輸出到像 -

{'a':[1,4], 'b':2, 'c':3} 

回答

1

下面的方法創建列表值如:

{'a':[1,4], 'b':[2], 'c':[3]} 

我無法想象爲什麼這樣做不好,但我在最後添加了一個方法來獲取您的特定輸出。

這不保持郵件的順序:

def ind(contracts): 
    index={} 
    for contract in contracts: 
     index.setdefault(contract.email, []).append(contract.cid) 
    return index 

維持秩序(例如,用「A」開頭),加from collects import OrderedDict到文件的頂部,然後其方法是:

def ind(contracts): 
    index = OrderedDict() 
    for contract in contracts: 
     index.setdefault(contract.email, []).append(contract.cid) 
    return index 

index的打印輸出看起來不同,但它的作用與正常的dict對象相同(只是在排序時)。

精確輸出(與順序):

def ind(contracts): 
    index = OrderedDict() 
    for contract in contracts: 
     if contract.email in index: 
      value = index[contract.email] 
      if not isinstance(value, list): 
       index[contract.email] = [value] 
      index[contract.email].append(contract.cid) 
     else: 
      index[contract.email] = contract.cid 
    return index