首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从python中的列表创建嵌套列表

从python中的列表创建嵌套列表
EN

Stack Overflow用户
提问于 2021-12-16 05:00:21
回答 2查看 138关注 0票数 0

需要从python中的列表中获取嵌套列表

代码语言:javascript
复制
list_values=[('BNB', '161221'),
 ('BNB', '171221'),
 ('BNB', '241221'),
 ('BNB', '280122'),
 ('BNB', '311221'),
 ('BTC', '161221'),
 ('BTC', '171221'),
 ('BTC', '241221'),
 ('BTC', '250222'),
 ('BTC', '250322'),
 ('BTC', '280122'),
 ('BTC', '311221')]

所需的列表输出如下

代码语言:javascript
复制
List_op=[[('BNB', '161221'),
 ('BNB', '171221'),
 ('BNB', '241221'),
 ('BNB', '280122'),
 ('BNB', '311221')],
[('BTC', '161221'),
 ('BTC', '171221'),
 ('BTC', '241221'),
 ('BTC', '250222'),
 ('BTC', '250322'),
 ('BTC', '280122'),
 ('BTC', '311221')]]

我试过一些理解列表的方法,但无法理解。我们很感激你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-16 05:14:12

一个简单的解决方案:

代码语言:javascript
复制
from collections import defaultdict

list_values = [
    ('BNB', '161221'),
    ('BNB', '171221'),
    ('BNB', '241221'),
    ('BNB', '280122'),
    ('BNB', '311221'),
    ('BTC', '161221'),
    ('BTC', '171221'),
    ('BTC', '241221'),
    ('BTC', '250222'),
    ('BTC', '250322'),
    ('BTC', '280122'),
    ('BTC', '311221')
]

# a dict might be a better data type here
result = defaultdict(list)
for k, v in list_values:
    result[k].append(v)
print(result)

# but if you need a list of lists instead of a dictionary:
result = defaultdict(list)
for k, v in list_values:
    result[k].append((k, v))
list_op = [*result.values()]
print(list_op)

输出:

代码语言:javascript
复制
defaultdict(<class 'list'>, {'BNB': ['161221', '171221', '241221', '280122', '311221'], 'BTC': ['161221', '171221', '241221', '250222', '250322', '280122', '311221']})
[[('BNB', '161221'), ('BNB', '171221'), ('BNB', '241221'), ('BNB', '280122'), ('BNB', '311221')], [('BTC', '161221'), ('BTC', '171221'), ('BTC', '241221'), ('BTC', '250222'), ('BTC', '250322'), ('BTC', '280122'), ('BTC', '311221')]]
票数 0
EN

Stack Overflow用户

发布于 2021-12-16 05:09:37

这样做并不是最优雅的方法,但您可以使用一个for每个循环来迭代您的起始列表,并构建2D输出:

代码语言:javascript
复制
list_values=[('BNB', '161221'),
 ('BNB', '171221'),
 ('BNB', '241221'),
 ('BNB', '280122'),
 ('BNB', '311221'),
 ('BTC', '161221'),
 ('BTC', '171221'),
 ('BTC', '241221'),
 ('BTC', '250222'),
 ('BTC', '250322'),
 ('BTC', '280122'),
 ('BTC', '311221')]

key = ''
List_op = []
for lv in list_values:
    if lv[0] != key:            # new key encountered
        if key != '':
            List_op.append(op)  # add previous 1D list to 2D output
        key = lv[0]             # assign new key value
        op = []                 # reinitialize 1D list
    op.append(lv)               # append current tuple to 1D list
List_op.append(op)              # add final 1D list to 2D 

print(List_op)

这些指纹:

代码语言:javascript
复制
[[('BNB', '161221'), ('BNB', '171221'), ('BNB', '241221'),
  ('BNB', '280122'), ('BNB', '311221')],
 [('BTC', '161221'), ('BTC', '171221'), ('BTC', '241221'),
  ('BTC', '250222'), ('BTC', '250322'), ('BTC', '280122'),
  ('BTC', '311221')]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70374027

复制
相关文章

相似问题

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