Python 3.x 在python中迭代类变量

Python 3.x 在python中迭代类变量,python-3.x,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,

请更正我的密码

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}

以下方法创建列表值,如:

{'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”开头),请将收集导入订单信息的
添加到文件顶部,然后使用以下方法:

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