首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据dict中的部分键对dicts列表进行分组

如何根据dict中的部分键对dicts列表进行分组
EN

Stack Overflow用户
提问于 2021-09-08 11:51:57
回答 2查看 88关注 0票数 1

我在整理我的名单时遇到了麻烦

所以假设我有这个:

代码语言:javascript
复制
data = [
{'records-0': '1'}, {'records-0-item1': '2'}, {'records-0-item2': '3'},{'records-0-item3': '4'},
{'records-1': '1'}, {'records-1-item1': '2'}, {'records-1-item2': '3'},
]

我想要的是根据我的键中的索引对我的列表进行排序(如果有任何意义的话)。

所以我的期望会是这样的。

代码语言:javascript
复制
sortedData = [
{0: [{'records-0': '1'}, {'records-0-item1': '2'}, {'records-0-item2': '3'},{'records-0-item3': '4'},]},
{1: [{'records-1': '1'}, {'records-1-item1': '2'}, {'records-1-item2': '3'},]
]

我已经尝试查找分组列表,但这一切都是基于一个特定的键。像这样的https://www.geeksforgeeks.org/group-list-of-dictionary-data-by-particular-key-in-python/

有什么想法吗?

编辑:列表中的数据是基于用户输入的,因此也可以有:

代码语言:javascript
复制
{'records-2': '1'}, {'records-3': '1'}, {'records-4': '1'}, etc
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-08 12:09:45

一种方法是使用字典

首先,只需定义一个助手方法来从字符串中获取键:

代码语言:javascript
复制
def get_key_from(string):
    return int(string.split('-')[1])

然后

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

sortedData_res = defaultdict(list)
for h in data:
    k = next(iter(h))
    sortedData_res[get_key_from(k)].append({k: ''})

所以你终于得到了这个结果:

代码语言:javascript
复制
sortedData_res

#defaultdict(list,
#            {0: [{'records-0': ''},
#              {'records-0-item1': ''},
#              {'records-0-item2': ''},
#              {'records-0-item3': ''}],
#             1: [{'records-1': ''},
#              {'records-1-item1': ''},
#              {'records-1-item2': ''}]})

或者调整代码以得到不同的信息。

例如,如果您使用.append(h),则可以获得:

代码语言:javascript
复制
#defaultdict(list,
#            {0: [{'records-0': '1'},
#              {'records-0-item1': '2'},
#              {'records-0-item2': '3'},
#              {'records-0-item3': '4'}],
#             1: [{'records-1': '1'},
#              {'records-1-item1': '2'},
#              {'records-1-item2': '3'}]})
票数 4
EN

Stack Overflow用户

发布于 2021-09-08 12:04:59

我建议您重新格式化您的sortedData并删除列表。你只能把你的数据收集到数据库里。

编辑的示例:(应该按原样工作)

代码语言:javascript
复制
def sort_data(l_: list):
    d_ = dict()
    for d in l_:
        for k, v in d.items():
            i = re.split('-', k)[1]
            if not d_.get(int(i)):
                d_[int(i)] = dict()
                d_[int(i)][k] = v
                continue
            d_[int(i)][k] = v
    return d_
代码语言:javascript
复制
>>> data = [
    {'records-0': '1'}, {'records-0-item1': '2'}, {'records-0-item2': '3'}, {'records-0-item3': '4'},
    {'records-1': '1'}, {'records-1-item1': '2'}, {'records-1-item2': '3'},
]
>>> print(sort_data(data))
{
    0: {
        'records-0': '1', 
        'records-0-item1': '2', 
        'records-0-item2': '3', 
        'records-0-item3': '4'
    }, 
    1: {
        'records-1': '1', 
        'records-1-item1': '2', 
        'records-1-item2': '3'
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69102556

复制
相关文章

相似问题

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