python - 对包含元组 python 的列表列表中的项目进行分组

标签 python sorting

我做 python 的时间不长,而且我很困在这个问题上。我有一个列表,其中包含许多其他列表,每个列表都包含不同数量的元组。我试过使用以前回答过的问题,例如 grouping python lists of lists , sorting and grouping nested lists和其他方法,例如使用计数器,但它们似乎都不适用于我的列表,其输出如下所示(这是我的输入数据):

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

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

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

即使我尝试使用 sorted 对这个列表进行排序(第二次尝试),它们都返回同一个未分组列表的变体,由许多空列表分隔:

# Q is name of list
#attempt 1:    
def grouper(sequence):
            result = []  

            for item in sequence:
                    for members, group in result:
                            if members.intersection(item):  
                                    members.update(item)
                                    group.append(item)
                                    break
                    else:  
                            result.append((set(item), [item]))
            return [group for members, group in result]
    output=grouper(Q)
    print(output)

#attempt 2:
import itertools
    import operator
    Q=sorted(q,key=operator.itemgetter(0))
    for key,group in itertools.groupby(Q,operator.itemgetter(0)):
            print(list(group))

#attempt 3:
from collections import Counter
    C = Counter(Q)
    for list,v in C.items():
            print ([list,]*v)

我想首先按位置 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)

关于python - 对包含元组 python 的列表列表中的项目进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41567756/

相关文章:

python - 格式化 Pandas 数据框中整数的千位分隔符

java - 在一个 solr 查询中动态提升和限制结果

python - 通过填充在 numpy 中表示不规则数组

Javascript:将对象数组过滤为两个

javascript - 替换字符串中的\(JavaScript)

java - 在Java中使用3个堆栈对未排序的数组进行排序

Angular 5 按日期排序

python - 将类的所有实例存储在类字段中是否不好?

python - 为什么在 pyqt5 中我应该使用 pyuic5 而不是 uic.loadUi ("my.ui")?

python - 允许谷歌应用程序的权限后无法连接到本地主机