迭代python中的类变量

时间:2017-05-23 00:10:05

标签: python-3.x

请更正我的代码

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 个答案:

答案 0 :(得分: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