我意识到这是一个基本问题,但我无法让它发挥作用。 我有以下元组:
t = (('apple', 'banana'), ('apple', 'carrot'), ('banana', 'carrot'))
我希望t
中每个元组中的第一个项目是唯一的,并将每个副本的第二项合并到一个字典中。
t = {('apple': 'banana', 'carrot'), ('banana': 'carrot')}
毫不奇怪,这不起作用:
t = dict(zip(set(t[0]),t[1]))
结果如下:
{'apple': 'apple', 'banana': 'carrot'}
答案 0 :(得分:2)
我认为,你应该在这里使用dict
(或者更确切地说是defaultdict
)。 key
的{{1}}将成为内部元组的第一个元素 - dict
。
这就是你想要的:
tup[0]
答案 1 :(得分:1)
以下是完整的解决方案(编辑:现在 兼容Python 3 ):
import functools
t = (('apple', 'banana'), ('apple', 'carrot'), ('banana', 'carrot'))
def insert(d,k,v):
d[k] = (v,) if k not in d else d[k]+(v,)
return d
z = functools.reduce(lambda d,ti: insert(d,*ti),t,{})
def flat(tpl):
return sum([(x,) if not isinstance(x,tuple) else x for x in tpl],())
result = [flat(x) for x in z.items()]
收益率:
[('apple', 'banana', 'carrot'), ('banana', 'carrot')]
答案 2 :(得分:1)
setdefault
dicts方法会派上用场:
t = (('apple', 'banana'), ('apple', 'carrot'), ('banana', 'carrot'))
d = {}
[d.setdefault(k,[]).append(v) for k,v in t]