Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List_Sorting_Nested_Tuples - Fatal编程技术网

Python-多元素分组(元组列表)

Python-多元素分组(元组列表),python,list,sorting,nested,tuples,Python,List,Sorting,Nested,Tuples,我有以下元组列表:[('platform','train','time')] 我希望我的输出如下: Platform 1: train 2: 02-19-2014, train 5: 02-19-2014, 06-19-2014 Platform 2: train 3: 04-19-2014, 07-19-2014 train 5: 09-19-2014 到目前为止,我只得到: Platform 1: train 2, train 5 Platform 2: train 3, train 5

我有以下元组列表:
[('platform','train','time')]

我希望我的输出如下:

Platform 1: train 2: 02-19-2014, train 5: 02-19-2014, 06-19-2014
Platform 2: train 3: 04-19-2014, 07-19-2014 train 5: 09-19-2014
到目前为止,我只得到:

Platform 1: train 2, train 5
Platform 2: train 3, train 5
使用此代码:

        for key, group in groupby(travel, lambda x: x[0]):
            listOfThings = " , ".join(["%s" % thing[1] for thing in group])
            print "Platform " + key + ": " + listOfThings
灵感来自帖子


如何更改代码以获得所需的输出?

groupby
要求对传递给它的iterable进行排序,如下代码所示。第一个
groupby
按平台分组。然后,第二个
groupby
用于按火车对时间进行分组

from itertools import groupby

travel= [(2,5,'09-19-2014'),(2,3,'07-19-2014'),(1,5,'06-19-2014'),(2,3,'04-19-2014'),(1,5,'01-19-2014'),(1,2,'02-19-2014')]

for platform, g1 in groupby(sorted(travel), lambda t: t[0]):
    print 'Platform {}: '.format(platform),
    trains = []
    for train, times in groupby(sorted(g1), lambda t: t[1]):
        trains.append('train {}: {}'.format(train, ', '.join(time[2] for time in times)))
    print ', '.join(trains)
输出

Platform 1:  train 2: 02-19-2014, train 5: 01-19-2014, 06-19-2014
Platform 2:  train 3: 04-19-2014, 07-19-2014, train 5: 09-19-2014

groupby
要求传递给它的iterable按照下面的代码进行排序。第一个
groupby
按平台分组。然后,第二个
groupby
用于按火车对时间进行分组

from itertools import groupby

travel= [(2,5,'09-19-2014'),(2,3,'07-19-2014'),(1,5,'06-19-2014'),(2,3,'04-19-2014'),(1,5,'01-19-2014'),(1,2,'02-19-2014')]

for platform, g1 in groupby(sorted(travel), lambda t: t[0]):
    print 'Platform {}: '.format(platform),
    trains = []
    for train, times in groupby(sorted(g1), lambda t: t[1]):
        trains.append('train {}: {}'.format(train, ', '.join(time[2] for time in times)))
    print ', '.join(trains)
输出

Platform 1:  train 2: 02-19-2014, train 5: 01-19-2014, 06-19-2014
Platform 2:  train 3: 04-19-2014, 07-19-2014, train 5: 09-19-2014

请先按平台编号对列表进行排序,或使用以平台编号为键的词典。请先按平台编号对列表进行排序,或使用以平台编号为键的词典。@Sepi,那么您为什么不接受它作为正确答案:)@Sepi,那么您为什么不接受它作为正确答案:)