У меня есть словарь, который выглядит следующим образом:средства вычисления значений для подгрупп ключей в питона словаре
cq={'A1_B2M_01':2.04, 'A2_B2M_01':2.58, 'A3_B2M_01':2.80, 'B1_B2M_02':5.00,
'B2_B2M_02':4.30, 'B2_B2M_02':2.40 etc.}
Мне нужно вычислить среднее триплетов, где ключи [2:] согласны. Таким образом, я бы в идеале хотел бы получить еще один словарь, который будет:
new={'_B2M_01': 2.47, '_B2M_02': 3.9}
Данные/должны быть в тройни так что в теории я мог бы просто получить средства последовательных значений, но в первую очередь, у меня есть это в словаре, поэтому ключи/значения, скорее всего, будут переупорядочены, кроме того, я предпочел бы придерживаться имен, как проверку качества для триплетов, назначенных именам (позже я добавлю немного сообщение об ошибке, когда будет больше, чем три на группу). Я пробовал создать словарь, в котором ключи были бы _B2M_01 и _B2M_02, а затем прокручивали исходный словарь, чтобы сначала добавить все значения, назначенные этим группам ключей, чтобы я мог позже вычислить среднее значение, но я получаю ошибки даже на первом этапе и в любом случае, я не уверен, что это наиболее эффективный способ сделать это ...
cq={'A1_B2M_01':2.4, 'A2_B2M_01':5, 'A3_B2M_01':4, 'B1_B2M_02':3, 'B2_B2M_02':7, 'B3_B2M_02':6}
trips=set([x[2:] for x in cq.keys()])
new={}
for each in trips:
for k,v in cq.iteritems():
if k[2:]==each:
new[each].append(v)
Traceback (most recent call last):
File "<pyshell#28>", line 4, in <module>
new[each].append(v)
KeyError: '_B2M_01'
Я был бы очень признателен за любые предложения. Кажется, это довольно простая операция, но я застрял.
Альтернативный результат, который был бы еще лучше, заключался бы в том, чтобы получить словарь, который содержит все имена, используемые как в cq, но со значениями, являющимися средствами группы. Таким образом, конечным результатом будет:
final={'A1_B2M_01':2.47, 'A2_B2M_01':2.47, 'A3_B2M_01':2.47, 'B1_B2M_02':3.9,
'B2_B2M_02':3.9, 'B2_B2M_02':3.9}
Эта работа тоже, очень приятно, спасибо! – branwen85