2016-03-14 3 views
-3

меня есть словарь PythonНарезка словаря в большом количестве копий в питона

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

Поскольку есть 2 словаря в ключе «Варс», я хочу иметь 3 различных словарей, как указано ниже. Пожалуйста, динамически 3 документы, как «вары» может иметь любое количество граней

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

разместить свои попытки .. –

+0

Не называйте переменные последовательно. Вместо этого используйте список. –

ответ

0

Так основной будет Somthing как:

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

или (с питона 3.5)

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

Или любое сочетание, которое вы чувствуете, легче понять.

+0

Редактировать * (k, v) в d * до * k, v в d.items() * – JRazor

+0

Зачем копировать 'd1' вообще? Между создаваемыми словарями нет значений. И что, если в '' vars'е есть более двух дополнительных граней? –

+0

@MartijnPieters Я предположил, что в словаре есть больше, чем просто «фасетов», и требуется слияние. Но если это не так, вы правы, мы можем пропустить копию. – Sorin

2

Не создавайте отдельные переменные. Если у вас есть 3 дополнительных аспектных словаря в ключе vars, вам также нужно выяснить, как создать 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'}}] 
+0

правильный martijin. я хочу сделать его динамичным – sumeetkarmali

Смежные вопросы