迭代元组列表并根据条件创建字典
假设我有一个像这样的元组列表:
t = [('one', 2), ('one', 4), ('one',9), ('two', 3), ('two', 5), ('two', 7), ('one', 11), ('one', 13), ('one', 14), ('one', 17), ('one', 19)]
我怎样才能得到下一个输出:
out = [{'no':'one', 'first':2, 'last':9},
{'no':'two', 'first':3, 'last':7},
{'no':'one', 'first':11, 'last':19}]
总体条件是:对于每组相等的第一个元素,只保留组中第一个和最后一个元素的值
回答
使用itertools.groupby和开箱:
from itertools import groupby
from operator import itemgetter
out = [
{'no': k, 'first': a, 'last': b}
for k, ((_, a), *_, (_, b)) in groupby(t, key=itemgetter(0))
]
from itertools import groupby
from operator import itemgetter
out = [
{'no': k, 'first': a, 'last': b}
for k, ((_, a), *_, (_, b)) in groupby(t, key=itemgetter(0))
]
如果您有任何只有一个连续元素的组,则上述操作将失败;要使其在这种情况下工作,您可以这样做: