2017-05-23 57 views

答えて

1

次の方法 - 私はのようになり、出力が必要

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)) 

をPythonのためにかなり新しいですよリストの値を作成する:

{'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