Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对包含元组的列表中的项进行分组_Python_Sorting - Fatal编程技术网

Python 对包含元组的列表中的项进行分组

Python 对包含元组的列表中的项进行分组,python,sorting,Python,Sorting,我做python的时间不长,我在这个问题上陷得很深。我有一个列表,其中可能包含其他列表,每个列表都包含不同数量的元组。我尝试过使用以前回答过的问题,如,和其他方法,如使用计数器,但它们似乎都不适用于我的列表,其输出如下所示(这是我的输入数据): 我认为我的列表(元组列表)的格式与其他问题中使用的格式不同。当我询问它的数据类型时,它会给出列表、元组和字符串,但会多次打印这些答案: print(type(Data)) # Returns list print(type(Data[0])) # Ret

我做python的时间不长,我在这个问题上陷得很深。我有一个列表,其中可能包含其他列表,每个列表都包含不同数量的元组。我尝试过使用以前回答过的问题,如,和其他方法,如使用计数器,但它们似乎都不适用于我的列表,其输出如下所示(这是我的输入数据):

我认为我的列表(元组列表)的格式与其他问题中使用的格式不同。当我询问它的数据类型时,它会给出列表、元组和字符串,但会多次打印这些答案:

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