Python 基于作为索引的字符串整数创建元组元素的嵌套列表

Python 基于作为索引的字符串整数创建元组元素的嵌套列表,python,tuples,sublist,Python,Tuples,Sublist,假设我有一个元组,它包含列表,其中的第一个元素总是一个字符串号,例如 asdf = (['0', ...], ['1', ...], ['2', ...], ['3.0', ...], ['3.1', ...], ['3.2', ...], ['4', ...] , ['5.0', ...], ['5.1', ...]) 实际上,我想要一个列表,它包含元组列表的所有字符串编号 但是,如果每个列表的第一个值包含一个子索引(在本例中为3.0、3.1、3.2和5.0、5.1),我希望将这些子值放在一

假设我有一个元组,它包含列表,其中的第一个元素总是一个字符串号,例如

asdf = (['0', ...], ['1', ...], ['2', ...], ['3.0', ...], ['3.1', ...], ['3.2', ...], ['4', ...] , ['5.0', ...], ['5.1', ...])
实际上,我想要一个列表,它包含元组列表的所有字符串编号

但是,如果每个列表的第一个值包含一个子索引(在本例中为
3.0、3.1、3.2和5.0、5.1
),我希望将这些子值放在一个子列表中。本例中的结果如下所示

Result = ['0', '1', '2', ['3.0', '3.1', '3.2'], '4', ['5.0', '5.1']]
谢谢你的帮助。

使用


您也可以不使用
itertools.groupby()
来执行此操作。您可以使用如下的排序方法/defaultdict方法:

from collections import defaultdict

asdf = (['0', ], ['1', ], ['2', ], ['3.0', ], ['3.1', ], ['3.2', ], ['4', ] , ['5.0', ], ['5.1', ])

all_items = [x[0] for x in asdf]

d = defaultdict(list)

for item in all_items:
    key = item[0]
    d[key].append(item)

values = [x[1] for x in sorted(d.items())]

result = []
for lst in values:
    if len(lst) == 1:
        result.append(lst[0])
    else:
        result.append(lst)
print(result)
输出:

['0', '1', '2', ['3.0', '3.1', '3.2'], '4', ['5.0', '5.1']]

这在没有defaultdicts的情况下也是可能的

为什么
'0'
不包括在
结果中?为什么在
元组定义的列表中有多余的逗号?@RoryDaulton,我从问题
asdf=(['0',…],['1',…]中删除了
..
),…
以便运行我的机器。这基本上是可行的,但是,如果一个数字等于/大于10,它也将被放入一个子列表中,因为长度将被检查,而不是字符串中有一个“.”的事实。@eljobso,我将
key
更改为
key=lambda x:x.split(')[0]
。对于您提到的案例,它也应该很有效。非常感谢。到目前为止,我对itertools还不是很熟悉。我确实需要更多地了解它。
['0', '1', '2', ['3.0', '3.1', '3.2'], '4', ['5.0', '5.1']]