2017-05-23 86 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