from collections import OrderedDict
l = [('Monkey', 71), ('Monkey', 78), ('Ostrich', 80), ('Ostrich', 96), ('Ant', 98)]
d = OrderedDict()
for i, j in l:
d[i] = j
print d
OrderedDict([('Monkey', 78), ('Ostrich', 96), ('Ant', 98)])
预期的'd'应该是:
OrderedDict([('Monkey', (71,78)), ('Ostrich', (80,96)), ('Ant', 98)])
如果所有值都被组合或列出,则没问题。
答案 0 :(得分:5)
不是每次都替换值,而是将其添加到元组:
>>> l = [('Monkey', 71), ('Monkey', 78), ('Ostrich', 80), ('Ostrich', 96), ('Ant', 98)]
>>> d = OrderedDict()
>>> for i, j in l:
... if i in d:
... d[i] += (j,)
... else:
... d[i] = (j,)
...
>>> d
OrderedDict([('Monkey', (71, 78)), ('Ostrich', (80, 96)), ('Ant', (98,))])
BTW,因为tuple
是不可变的,所以每个附加都会创建一个新对象。如果您使用list
s。
答案 1 :(得分:1)
以下是使用Clock.schedule_interval(filechooser._update_files, t)
的方法:
groupby
答案 2 :(得分:1)
for i, j in l:
if i in d:
#d[i] = (lambda x: x if type(x) is tuple else (x,))(d[i])
#Eugene's version:
if not isinstance(d[i], tuple):
d[i] = (d[i],)
d[i] += (j,)
else:
d[i] = j
给出以下内容。请注意,'Ant'中的98不是原始问题中的“tupled”。
OrderedDict([('Monkey', (71, 78)), ('Ostrich', (80, 96)), ('Ant', 98)])