首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从列表列表到列表列表

从列表列表到列表列表
EN

Stack Overflow用户
提问于 2020-01-29 14:14:34
回答 5查看 103关注 0票数 0

我有一个这样的清单:

代码语言:javascript
复制
first_list = [[ 1.        , 45.4,  9.1],
              [ 2.        , 45.5,  9.1],
              [ 2.        , 45.4,  9.2],
              [ 2.        , 45.4,  9.2],
              [ 3.        , 45.4,  9.1],
              [ 3.        , 45.4,  9.1],
              [ 3.        , 45.4,  9.1] ]

我想使用folio函数HeatMapWithTime,为此,我需要根据每个子列表(1.、2.、3. ecc)的第一项对上面的数据进行分组:

代码语言:javascript
复制
new_list = [ [ [45.4, 9.1] ],                               # All coords for 1.
             [ [45.5, 9.1], [45.4, 9.2], [45.4, 9.2] ],     # All coords for 2.
             [ [45.4, 9.1], [45.4, 9.1], [45.4, 9.2] ] ]    # All coords for 3.

我怎么能这么做?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-01-29 14:38:08

使用pandas的一种解决方案是处理复杂数据格式时的明智选择:

代码语言:javascript
复制
import pandas as pd    
pd.DataFrame(first_list).set_index(0).groupby(df.index).apply(lambda x: x.values.tolist()).tolist()
#-> 
[[[45.4, 9.1]],
 [[45.5, 9.1], [45.4, 9.2], [45.4, 9.2]],
 [[45.4, 9.1], [45.4, 9.1], [45.4, 9.1]]]
票数 0
EN

Stack Overflow用户

发布于 2020-01-29 14:17:03

假设列表是按第一个元素排序的,正如看起来的那样,您可以使用itertools.groupby

代码语言:javascript
复制
from itertools import groupby
from operator import itemgetter
[[i[1:] for i in v] for k,v in groupby(first_list, itemgetter(0))]

#[[[45.4, 9.1]],
# [[45.5, 9.1], [45.4, 9.2], [45.4, 9.2]],
# [[45.4, 9.1], [45.4, 9.1], [45.4, 9.1]]]
票数 3
EN

Stack Overflow用户

发布于 2020-01-29 14:34:15

您可以在字典中收集所有坐标:

代码语言:javascript
复制
res = {}
for entry in first_list:
    res.setdefault(entry[0], []).append(entry[1:])

这给了你:

代码语言:javascript
复制
>>> res
{1.0: [[45.4, 9.1]],
 2.0: [[45.5, 9.1], [45.4, 9.2], [45.4, 9.2]],
 3.0: [[45.4, 9.1], [45.4, 9.1], [45.4, 9.1]]}

如果您的列表已经排序,则将这些值转换为一个列表(仅限Python):

代码语言:javascript
复制
>>> list(res.values())
[[[45.4, 9.1]],
 [[45.5, 9.1], [45.4, 9.2], [45.4, 9.2]],
 [[45.4, 9.1], [45.4, 9.1], [45.4, 9.1]]]

否则,您需要首先对它们进行排序:

代码语言:javascript
复制
>>> [res[key] for key in sorted(res.keys())]
[[[45.4, 9.1]],
 [[45.5, 9.1], [45.4, 9.2], [45.4, 9.2]],
 [[45.4, 9.1], [45.4, 9.1], [45.4, 9.1]]]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59968986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档