在python中将字典拆分为多个副本

2024-09-28 05:22:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本python词典

d = {
    'facets':{'style':"collared",'pocket':"yes"},   
    'vars':[    {'facets':{'color':"blue", 'size':"XL"}}, 
                {'facets':{'color':"blue", 'size':"L"}}   ]
}

因为'vars'键中有2个字典,所以我想要3个不同的字典,如下所示。请使它动态3个文件作为'变量'可以有任何方面的数目

d1 = {
    'facets':{'style':"collared",'pocket':"yes"}
} 
d2 = {
    'facets':{'color':"blue", 'size':"XL"}
}
d3 = {
    'facets':{'color':"blue", 'size':"L"}
}

Tags: 文件size字典style动态bluevarspocket
2条回答

所以基本原理是这样的:

d1 = {k: v for (k,v) in d.iteritems() if k!= 'vars'}
other_ds = [ d1.copy().update(var) for var in d['vars'] ]

但是你可以修改以得到你想要的,比如:

d2 = d1.copy().update(d['vars'][0])

或者(从python 3.5开始)

d2 = {**d1, **d['vars'][0]}

或者任何你觉得更容易理解的组合

不要创建单独的变量。如果在vars键中有3个额外的facet字典,那么您还必须弄清楚如何创建d4等。稍后,您突然必须猜测存在多少d*变量

改为创建列表:

facets = [{'facets': d['facets']}] + [facet for facet in d['vars']]

有了一个列表,您现在可以简单地循环所有facets条目来操作或显示它们

演示:

>>> d = {
...     'facets':{'style':"collared",'pocket':"yes"},
...     'vars':[    {'facets':{'color':"blue", 'size':"XL"}},
...                 {'facets':{'color':"blue", 'size':"L"}}   ]
... }
>>> [{'facets': d['facets']}] + [facet for facet in d['vars']]
[{'facets': {'pocket': 'yes', 'style': 'collared'}}, {'facets': {'color': 'blue', 'size': 'XL'}}, {'facets': {'color': 'blue', 'size': 'L'}}]
>>> from pprint import pprint
>>> pprint(_)
[{'facets': {'pocket': 'yes', 'style': 'collared'}},
 {'facets': {'color': 'blue', 'size': 'XL'}},
 {'facets': {'color': 'blue', 'size': 'L'}}]

相关问题 更多 >

    热门问题