迭代元组列表并根据条件创建字典

假设我有一个像这样的元组列表:

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))
]

如果您有任何只有一个连续元素的组,则上述操作将失败;要使其在这种情况下工作,您可以这样做:


以上是迭代元组列表并根据条件创建字典的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>