python:对具有相同第一个元素的元组的元素进行分组 [英] python: group elements of a tuple having the same first element
本文介绍了python:对具有相同第一个元素的元组的元素进行分组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个这样的元组
[
(379146591, 'it', 55, 1, 1, 'NON ENTRARE', 'NonEntrate', 55, 1),
(4746004, 'it', 28, 2, 2, 'NON ENTRARE', 'NonEntrate', 26, 2),
(4746004, 'it', 28, 2, 2, 'TheBestTroll Group', 'TheBestTrollGroup', 2, 3)
]
我想得到这个:
[
(379146591, (('it', 55, 1, 1, 'NON ENTRARE', 'NonEntrate', 55, 1)),
(4746004, (('it', 28, 2, 2, 'NON ENTRARE', 'NonEntrate', 26, 2), ('it', 28, 2, 2, 'TheBestTroll Group', 'TheBestTrollGroup', 2, 3)))
]
因此,对于任何元素,不是第一个元素的任何元素都在它的子元组之内,如果后面的元素与第一个元素具有相同的元素,它将被设置为上一个子元组的另一个子元组一个.
so the for any element, anything that is not the first element is inside a sub-tuple of it, and if the following element has the same element as first element, it will be set as another sub-tuple of the previous one.
我可以这样做:
for i in data:
# getting the first element of the list
for sub_i in i[1]:
# i access all the tuples inside
有一些功能可以做到这一点吗?
are there some functions to do this?
推荐答案
使用defaultdict
非常简单;您将默认值初始化为列表,然后将该项目附加到同一键的值上:
It's pretty simple with defaultdict
; You initialize the default value to be a list and then append the item to the value of the same key:
lst = [
(379146591, 'it', 55, 1, 1, 'NON ENTRARE', 'NonEntrate', 55, 1),
(4746004, 'it', 28, 2, 2, 'NON ENTRARE', 'NonEntrate', 26, 2),
(4746004, 'it', 28, 2, 2, 'TheBestTroll Group', 'TheBestTrollGroup', 2, 3)
]
from collections import defaultdict
d = defaultdict(list)
for k, *v in lst:
d[k].append(v)
list(d.items())
#[(4746004,
# [('it', 28, 2, 2, 'NON ENTRARE', 'NonEntrate', 26, 2),
# ('it', 28, 2, 2, 'TheBestTroll Group', 'TheBestTrollGroup', 2, 3)]),
# (379146591, [('it', 55, 1, 1, 'NON ENTRARE', 'NonEntrate', 55, 1)])]
如果顺序很重要,请使用OrderedDict
可以记住插入顺序:
If order is important, use an OrderedDict
which can remember the insertion orders:
from collections import OrderedDict
d = OrderedDict()
for k, *v in lst:
d.setdefault(k, []).append(v)
list(d.items())
#[(379146591, [['it', 55, 1, 1, 'NON ENTRARE', 'NonEntrate', 55, 1]]),
# (4746004,
# [['it', 28, 2, 2, 'NON ENTRARE', 'NonEntrate', 26, 2],
# ['it', 28, 2, 2, 'TheBestTroll Group', 'TheBestTrollGroup', 2, 3]])]
这篇关于python:对具有相同第一个元素的元组的元素进行分组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文