Я, вероятно, не использую здесь правильные слова, но в основном я хочу добавить еще один ключ рядом с первым предоставленным ключом.Python defaultdict - добавить еще один ключ?
Это то, что я в настоящее время:
def transform_result(self, data):
type_map = defaultdict(list)
for entry in data:
type_map[entry['type']].append({
'id': entry['id'],
'tag': entry['tag'],
})
ret = []
for key, value, in type_map.items():
ret.append({
'type': key,
'tags': value,
})
return ret
Вход:
[
OrderedDict([
('id', 1),
('type', 'Color'),
('writable', True),
('tag', 'Blue')
]),
OrderedDict([
('id', 2),
('type', 'Color'),
('writable', True),
('tag', 'Red')
]),
OrderedDict([
('id', 3),
('type', 'Color'),
('writable', True),
('tag', 'Green')
]),
OrderedDict([
('id', 4),
('type', 'Shape'),
('writable', False),
('tag', 'Square')
]),
OrderedDict([
('id', 5),
('type', 'Shape'),
('writable', False),
('tag', 'Circle')
])
]
Желаемый результат:
[
{
'type': 'Color',
'writable': True,
'tags': [
{
'tag': 'Blue',
'id': 1
},
{
'tag': 'Red',
'id': 2
},
{
'tag': 'Green',
'id': 3
}
]
},
{
'type': 'Shape',
'writable': False,
'tags': [
{
'tag': 'Square',
'id': 4
},
{
'tag': 'Circle',
'id': 5
},
]
},
]
Как это должно быть достигнуто?
Редактировать: Я получил его, извините, я полностью резиновый уклонил это. Вот мое Hacky решение:
def transform_result(self, data):
type_map = defaultdict(list)
for entry in data:
type_map[entry['type'], entry['many']].append({
'id': entry['id'],
'tag': entry['tag'],
})
ret = []
for key, value, in type_map.items():
ret.append({
'type': key[0],
'many': key[1],
'tags': value
})
return ret
В принципе, то, что вводит в заблуждение меня было то, как получить доступ к many
после того, как первый цикл был завершен. Мое решение состояло в том, чтобы быстро положить type
и many
вместе в небольшом списке, затем получить к ним доступ с [0]
и [1]
, он работает!
Вы можете указать более точное описание вашей цели вместо [XYproblem] (http://xyproblem.info/)? вход и выход, [MCVE] (http://stackoverflow.com/help/mcve) – Pynchia
ОК, работающий над ним – dtgq
'defaultdict' построен вокруг добавления значения для одного отсутствующего ключа; если вы хотите что-то еще, вы можете также начать с 'class MyThing (dict)'. – jonrsharpe