Python 对包含元组的列表中的项进行分组
我做python的时间不长,我在这个问题上陷得很深。我有一个列表,其中可能包含其他列表,每个列表都包含不同数量的元组。我尝试过使用以前回答过的问题,如,和其他方法,如使用计数器,但它们似乎都不适用于我的列表,其输出如下所示(这是我的输入数据): 我认为我的列表(元组列表)的格式与其他问题中使用的格式不同。当我询问它的数据类型时,它会给出列表、元组和字符串,但会多次打印这些答案:Python 对包含元组的列表中的项进行分组,python,sorting,Python,Sorting,我做python的时间不长,我在这个问题上陷得很深。我有一个列表,其中可能包含其他列表,每个列表都包含不同数量的元组。我尝试过使用以前回答过的问题,如,和其他方法,如使用计数器,但它们似乎都不适用于我的列表,其输出如下所示(这是我的输入数据): 我认为我的列表(元组列表)的格式与其他问题中使用的格式不同。当我询问它的数据类型时,它会给出列表、元组和字符串,但会多次打印这些答案: print(type(Data)) # Returns list print(type(Data[0])) # Ret
print(type(Data))
# Returns list
print(type(Data[0]))
# Returns tuple
print(type(Data[0][0]))
# Returns str
#output looks like this:
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
我想将该列表首先按位置0处的TXXXX编号进行分组,然后按位置1处的两个字母进行分组,同时保留每组中所有重复的元素。但是,详细解释如何对Txxxx编号进行分组会很有帮助,这样我就可以自己找出如何对位置1的字母进行分组。所需的输出应如下所示:
[[('T0931', 'AB', '0.7826705747628963')],[('T0932', 'AB', '0.6395086105062'),('T0932', 'AB', '0.63950861050628')],[('T0933', 'AB', '0.8960345460457968'), ('T0933', 'AF', '0.8951297220212914'), ('T0933', 'BC', '0.8951297782393018'), ('T0933', 'CD', '0.8951298105762795'), ('T0933', 'DE', '0.8951299080330034'), ('T0933', 'EF', '0.8941510860547524'), ('T0933', 'AB', '0.8960345460457968'), ('T0933', 'AF', '0.8951297220212914'), ('T0933', 'BC', '0.8951297782393018'), ('T0933', 'CD', '0.8951298105762795'), ('T0933', 'DE', '0.8951299080330034'), ('T0933', 'EF', '0.8941510860547524')]]
同样在这种情况下,我不相信编一本字典会起作用(我在类似的问题中看到了这一点),因为这只是列表的一个样本,完整的列表在位置0处包含许多不同的Txxxx编号
提前谢谢。您可以使用
defaultdict
保留每个发送/代码组合的所有值
from collections import defaultdict
d = defaultdict(list)
for group in q:
for tx, code, value in group:
d[tx, code].append(value)
您可以使用分组方式,如下所示:
my_list=[('T0931', 'AB', '0.7826705747628963'),('T0932', 'AB', '0.63950861050628'),
('T0933', 'AB', '0.8960345460457968'), ('T0933', 'AF', '0.8951297220212914'),
('T0933', 'BC', '0.8951297782393018'), ('T0933', 'CD', '0.8951298105762795'),
('T0933', 'DE', '0.8951299080330034'), ('T0933', 'EF', '0.8941510860547524'),
('T0932', 'AB', '0.63950861050628'),('T0933', 'AB', '0.8960345460457968'),
('T0933', 'AF', '0.8951297220212914'), ('T0933', 'BC', '0.8951297782393018'),
('T0933', 'CD', '0.8951298105762795'), ('T0933', 'DE', '0.8951299080330034'),
('T0933', 'EF', '0.8941510860547524')]
import itertools
res =[]
for key, value in itertools.groupby(my_list, lambda x: x[0]):
l=[]
for val in value :
l.append(val)
res.append(l)
输出:
[[('T0931', 'AB', '0.7826705747628963')], [('T0932', 'AB', '0.63950861050628')], [('T0933', 'AB', '0.8960345460457968'), ('T0933', 'AF', '0.8951297220212914'), ('T0933', 'BC', '0.8951297782393018'), ('T0933', 'CD', '0.8951298105762795'), ('T0933', 'DE', '0.8951299080330034'), ('T0933', 'EF', '0.8941510860547524')], [('T0932', 'AB', '0.63950861050628')], [('T0933', 'AB', '0.8960345460457968'), ('T0933', 'AF', '0.8951297220212914'), ('T0933', 'BC', '0.8951297782393018'), ('T0933', 'CD', '0.8951298105762795'), ('T0933', 'DE', '0.8951299080330034'), ('T0933', 'EF', '0.8941510860547524')]]
根据您提供的信息,我不认为您的数据是一个列表列表。您能否提供预期的输入和预期的输出?它有点让人困惑,但无法直观地看到你想要的东西。我对它进行了编辑,试图让它更清晰,包括来自数据类型的新输出,该数据类型的输出与来自代码另一部分的输出混合在一起,导致原始输出中出现空列表。不幸的是,此方法导致错误:
要解压缩的值太多(预期为3)
@Emma Try,对于tx,code,*组中的值:d[tx,code]。append(value)
。只需在值中添加一个*
,就可以在一个变量中添加任意数量的以下项。只有当元组有3个以上的项时才应该是这种情况。@KHELILI Hamza有办法使输出看起来更像[('T0931','AB','0.7826705747628963'),[('T0932','AB','0.6395086105062'),('T0932','AB','0.63950861050628'),[('T0933','AB','0.8960345460457968'),('T0933','AF','0.8951297212914'),('T0933','BC','0.8951297782393018'),('T0933','CD','0.8951298105762795'),('T0933','DE','0.8951299080330034'),('T0933','EF','0.8941510860547524'),('T0933','AB','0.8960345460457968')].
这样每个Txxxx编号都有自己的列表,以及包含该列表中Txxxx编号的元组的所有实例?
my_list=[('T0931', 'AB', '0.7826705747628963'),('T0932', 'AB', '0.63950861050628'),
('T0933', 'AB', '0.8960345460457968'), ('T0933', 'AF', '0.8951297220212914'),
('T0933', 'BC', '0.8951297782393018'), ('T0933', 'CD', '0.8951298105762795'),
('T0933', 'DE', '0.8951299080330034'), ('T0933', 'EF', '0.8941510860547524'),
('T0932', 'AB', '0.63950861050628'),('T0933', 'AB', '0.8960345460457968'),
('T0933', 'AF', '0.8951297220212914'), ('T0933', 'BC', '0.8951297782393018'),
('T0933', 'CD', '0.8951298105762795'), ('T0933', 'DE', '0.8951299080330034'),
('T0933', 'EF', '0.8941510860547524')]
import itertools
res =[]
for key, value in itertools.groupby(my_list, lambda x: x[0]):
l=[]
for val in value :
l.append(val)
res.append(l)
[[('T0931', 'AB', '0.7826705747628963')], [('T0932', 'AB', '0.63950861050628')], [('T0933', 'AB', '0.8960345460457968'), ('T0933', 'AF', '0.8951297220212914'), ('T0933', 'BC', '0.8951297782393018'), ('T0933', 'CD', '0.8951298105762795'), ('T0933', 'DE', '0.8951299080330034'), ('T0933', 'EF', '0.8941510860547524')], [('T0932', 'AB', '0.63950861050628')], [('T0933', 'AB', '0.8960345460457968'), ('T0933', 'AF', '0.8951297220212914'), ('T0933', 'BC', '0.8951297782393018'), ('T0933', 'CD', '0.8951298105762795'), ('T0933', 'DE', '0.8951299080330034'), ('T0933', 'EF', '0.8941510860547524')]]