Я новичок в python и пытаюсь сгруппировать существующий словарь python по ключу. У меня есть словарь, подобный этому.
a = {'a1':'obj_1','b1':'obj_2','c1':'obj_3','a2':'obj_4','b2':'obj_5','c2':'obj_6'}
Я хочу создать другой словарь, сгруппировав все элементы вместе, начиная с 'a', 'b', 'c', как показано ниже:
{'aonly': {'a1': 'obj_1','a2': 'obj_4'}, 'bonly': {'b1': 'obj_2','b2': 'obj_5'}, 'conly': {'c1': 'obj_3','c2': 'obj_6'}}
Решение, которое я попробовал, было:
d = {}
for k,v in a.items():
print(k)
print(v)
if 'a' in k:
d.setdefault('a',{k:v})
elif 'b' in k:
d.setdefault('b',{k:v})
elif 'c' in k:
d.setdefault('c',{k:v})
print(d)
, но это не дает правильного вывода.
Другое решение, которое я попробовал, было
l= []
m = []
n = []
d = {}
for i in a:
if 'a' in i:
l.append({i:a[i]})
d['aonly'] = l
elif 'b' in i:
m.append({i:a[i]})
d['bonly'] = m
elif 'c' in i:
n.append({i:a[i]})
d['conly'] = n
print(d)
Этот вид служит моей цели, но неэффективен из-за использования list et c. Есть ли лучший способ решить эту проблему?
также, во втором фрагменте кода, почему присвоение в одной строке дает странный результат?
l = m = n = []
, пожалуйста, сообщите.
Я вроде прочитал defaultDict из режима коллекций, но немного запутался с моим требованием. Может кто-нибудь помочь мне с этим пожалуйста?