Попытка вложить словарь из предыдущего словаря - PullRequest
0 голосов
/ 20 февраля 2020

поэтому у меня есть следующий сценарий:

dictionary=[
{category1:clothes, category2:cheap, category3:10},
{category1:clothes, category2:normal, category3:20}]

Мне нужен словарь, который идет {clothes:{cheap:10, normal:20}} Все, что я понял, это то, что печатает их по отдельности

for i in range(len(dictionary)):
print({dictionary[i]['category1']:{dictionary[i][category2],dictionary[i][category3]}}

Но это печатает их по отдельности, и я не могу понять, как их вложить, так как это просто дает мне два словаря с нужным мне форматом, но вложенный словарь просто имеет значения из первого списка или второго. Я также пытался

[{item['category1']: {'Attribute': attr_key, 'Value': item[attr_key]}}
    for item in dictionary for attr_key in item if attr_key != 'category1']

Это то же самое, он дает больше строк, тогда как мне просто нужен один словарь с cat1, а другие вложены в его словарь.

Ответы [ 2 ]

1 голос
/ 20 февраля 2020
raw = {}
for item in dictionary:
    value1 = item.get('category2')
    value2 = item.get('category3')
    raw.update({value1:value2})

data = {}
data[dictionary[0].get('category1')] = raw

Выход:

{'clothes': {'cheap': 10, 'normal': 20}}
0 голосов
/ 20 февраля 2020

Это должно сделать это.

import collections

dictionary=[
    {'category1':'clothes', 'category2':'cheap', 'category3':10},
    {'category1':'clothes', 'category2':'normal', 'category3':20}
]

newdict = collections.defaultdict(dict)
for item in dictionary:
  newdict[item['category1']].update({item['category2']: item['category3']})
print(newdict)
...