首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据使用Python的部分值将字典拆分到多个字典中

如何根据使用Python的部分值将字典拆分到多个字典中
EN

Stack Overflow用户
提问于 2019-09-06 14:12:52
回答 5查看 147关注 0票数 7

我有一本字典如下所示

代码语言:javascript
复制
dict={'sku1':'k-1','sku2':'k-2','sku3':'b-10','sku4':'b-1','sku5':'x-1', 'sku6':'x-2'}

我怎样才能根据第一封价值信得到单独的字典?像这样:

代码语言:javascript
复制
dict1={'sku5':'x-1','sku6':'x-2'}
dict2={'sku1':'k-1','sku2':'k-2'}
dict2={'sku3':'b-10','sku4':'b-1'}

我一开始

代码语言:javascript
复制
for an_item in thevalues_ofdict:
    Splitted_Pcodes.append(int(an_item.split("-")[0]))
    for i in Splitted_Pcodes:
        if i=='x':

但是我将如何找到整个初始的副动元素

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-09-06 14:21:41

从某种意义上说,我认为这就是你想要做的。结果是一个主(‘母’)字典,作为键所有可能的第一个字母,并作为相应的分词的值。

代码语言:javascript
复制
from collections import defaultdict
d = {'sku1': 'k-1','sku2': 'k-2','sku3': 'b-10' ,'sku4': 'b-1', 'sku5': 'x-1', 'sku6':'x-2'}

mother = defaultdict(dict)
for key, val in d.items():
    mother[val[0]][key] = val

mother = dict(mother)
print(mother)

输出:

代码语言:javascript
复制
{'k': {'sku1': 'k-1', 'sku2': 'k-2'},
 'b': {'sku3': 'b-10', 'sku4': 'b-1'},
 'x': {'sku5': 'x-1', 'sku6': 'x-2'}}

然后,您可以像这样轻松地访问它们。

代码语言:javascript
复制
k_dict = mother['k']
b_dict = mother['b']
x_dict = mother['x']

如果您想要更多的控制,并且希望能够给出键的大小,我们可以这样做:

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


def split_d(d, key_size=1):
    if key_size < 1:
        raise ValueError("'key_size' must be 1 or more")

    mother = defaultdict(dict)
    for key, val in d.items():
        mother[val[0:key_size]][key] = val

    return dict(mother)

if __name__ == '__main__':
    d = {'sku1': 'k-1','sku2': 'k-2','sku3': 'b-10' ,'sku4': 'b-1', 'sku5': 'x-1', 'sku6':'x-2'}

    res = split_d(d, 3)
    print(res)
票数 10
EN

Stack Overflow用户

发布于 2019-09-06 14:26:25

代码语言:javascript
复制
from pprint import pprint

dict={'sku1':'k-1','sku2':'k-2','sku3':'b-10','sku4':'b-1','sku5':'x-1', 'sku6':'x-2'}

newdict = {}
for key, val in dict.items():
    v = val[0]
    if v not in newdict:
        newdict[v] = {}
    newdict[v][key] = val

pprint(newdict, indent=4)

输出:

代码语言:javascript
复制
{   'b': {'sku3': 'b-10', 'sku4': 'b-1'},
    'k': {'sku1': 'k-1', 'sku2': 'k-2'},
    'x': {'sku5': 'x-1', 'sku6': 'x-2'}}
票数 1
EN

Stack Overflow用户

发布于 2019-09-06 14:26:51

首先,你不应该把你的字典命名为“迪克”,因为这会扰乱蟒蛇的功能。

代码语言:javascript
复制
my_dict = {'sku1':'k-1','sku2':'k-2','sku3':'b-10','sku4':'b-1','sku5':'x-1', 'sku6':'x-2'}

下面是一个列表理解,它返回一个字典列表:

代码语言:javascript
复制
[{k:v for (k,v) in my_dict.items() if v[0] == start_val} for start_val in {val[0] for val in my_dict.values()}]

输出:

代码语言:javascript
复制
 [{'sku5': 'x-1', 'sku6': 'x-2'},
 {'sku3': 'b-10', 'sku4': 'b-1'},
 {'sku1': 'k-1', 'sku2': 'k-2'}]

它不处理动态字典名称,但这似乎不是问题的重点。

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

https://stackoverflow.com/questions/57823718

复制
相关文章

相似问题

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