Я давно не занимаюсь python, и я довольно застрял в этой проблеме. У меня есть список, содержащий другие списки, каждый из которых содержит различное количество кортежей. Я попытался использовать ранее заданные вопросы, такие как grouping python lists of lists, sorting and grouping nested lists и другие методы, такие как использование счетчиков, но ни один из них, похоже, не работает в моем списке, выход которого выглядит следующим образом: (Это мои данные):группировка элементов в списке списков, содержащих кортежи python
[('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'>
Даже когда я пытаюсь отсортировать этот список с помощью сортировки (второй попытки), они все варианты Возвращения же разгруппированы список разделенных многих пустых списков:
# 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)
Я хотел бы, чтобы сгруппировать этот список первым по количеству TXXXX в положении 0, то с помощью двух букв в положении 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')]]
Кроме того, в этом случае я не верю, что делает словарь будет работать (то, что я видел, делал в подобных вопросах), как это только образец списка, полный список содержит много разных номеров Txxxx в позиции 0.
Спасибо заранее.
Из того, что вы предоставили, я не верю, что ваши данные - это список списков. Могли бы вы также обеспечить ожидаемый ввод и желаемый результат? Это немного запутанно, не имея возможности визуально видеть, что вы хотите. –
Я отредактировал его, чтобы попытаться сделать его более ясным, в том числе новый вывод из типа данных, который выводил из другой части кода, смешанной с тем, что пустые списки появлялись в исходном выпуске. – Emma