簡體   English   中英

在python中將字典拆分為多個副本

[英]Splitting the dictionary into multiple copies in python

我有一個 python 字典

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

由於 'vars' 鍵中有 2 個字典,我想要 3 個不同的字典,如下所示。 請動態創建 3 個文檔,因為“vars”可以有任意數量的方面

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

不要創建單獨的變量。 如果您在vars鍵中有 3 個額外的方面字典,您還必須弄清楚如何創建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'}}]

所以基本的東西是這樣的:

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]}

或者你覺得更容易理解的任何組合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM