首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将相似的列表元素分组到dict中,而不对其多次发生进行分组

将相似的列表元素分组到dict中,而不对其多次发生进行分组
EN

Stack Overflow用户
提问于 2022-07-19 10:29:16
回答 1查看 38关注 0票数 1

我有一个巨大的列表,我把它转换成一个dict(基于第一个列表元素),以便用键进行快速搜索。

列表:

代码语言:javascript
复制
[0100,A,1.00,1]
.
.
[0450,A,1.00,1]
[0470,B,1.00,1]
[0480,A,1.00,1]
[0490,A,1.00,1]
[0500,A,1.00,1] #list-1 for below ref
[0510,B,1.00,1]
[0520,A,1.00,1]
[0530,A,1.00,1]
[0500,A,1.00,1] #list-2 for below ref
[0510,B,1.00,1]
[0520,X,1.00,1] #........

转换为Dic:

代码语言:javascript
复制
for key, *vals in bytes_data: #Probably need a diff approach here itself instead appending
    data_dict.setdefault(key, []).append(vals) 

迪克特看起来

代码语言:javascript
复制
{
    '0450': [[A,1.00,1]],
    '0470': [[B,1.00,1]],
    '0480': [[A,1.00,1]], #......
}

现在,我现在的场景需要像4xx/5xx/.根据实际情况。为此,我用..。

代码语言:javascript
复制
key_series = ["0" + str(x) for x in range(500, 600, 10)]
article_data = {
    key: data_dict[key] for key in set(key_series) & set(data_dict)
}

问题是,对于像5xx这样的系列,会出现多个事件。在这种情况下,我的数据分组如下

代码语言:javascript
复制
{
    0500: [list-1,list-2,..],
    0510: [list-1,list-2,..]
}

但是,我需要这样的东西

代码语言:javascript
复制
{
0500-1: {0500: [list-1], 0510: [list-1],....}, 
0500-2: {0500: [list-2], 0510: [list-2],....},
}

有什么办法可以做到吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-07-19 11:07:09

不确定,如果这是你想要的,让我知道这是否解决了你的问题

代码语言:javascript
复制
from collections import defaultdict
data_dict = {
    "0500": [["A",1.00,1]],
    "0510": [["A",1.00,1], ["B",1.00,1], ["B",1.00,1]],
    "0520": [["A",1.00,1], ["D",1.00,1]]
}
key_series = ["0" + str(x) for x in range(500, 600, 10)]
article_data = {
    key: data_dict[key] for key in set(key_series) & set(data_dict)
}
res = defaultdict(dict)
for k ,v in data_dict.items():
    for i, d in enumerate(v):
        # for now 0500 is hardcoded, which can be made dynamic as per requirement
        res[f"0500-{i+1}"][k] = d

print(res)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73035274

复制
相关文章

相似问题

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