将元组的元组转换为dict ----当密钥已经存在时,不要忽略该值

时间:2012-08-17 06:37:12

标签: python dictionary tuples

输入:

a = (("s", 3), ("c", 6), ("s", 8))
dict(a)

输出:

{"s": 3, "c": 6}

如何获得以下结果?

{"s": (3, 8), "c": 6} 

2 个答案:

答案 0 :(得分:2)

使用setdefault()c应该是一个列表:

>>> a = (("s",3), ("c",6), ("s",8))
>>> dic={}
>>> for x in a:
    dic.setdefault(x[0],[]).append(x[1])


>>> dic
{'s': [3, 8], 'c': [6]}

答案 1 :(得分:2)

另一种选择是使用groupby(虽然我会去defaultdict),这意味着如果你需要,你可以很容易地留下元组:

from itertools import groupby
from operator import itemgetter as ig

a = (("s", 3), ("c", 6), ("s", 8))    
newdict = { k:tuple(map(ig(1), v)) for k, v in groupby(sorted(a), ig(0)) }