2017-02-04 1 views
-3

Я новичок в python, и я нахожу проблемы в понимании того, как работать со списками и словарями. В частности, я не могу решить эту проблему:Итерационная функция в словарях

Учитывая следующий словарь:

A=[{'t':1, 'X':10, 'Y': 15}, 
    {'t':4, 'X':2500, 'Y': 3000}, 
    {'t':1, 'X':20, 'Y': 10}, 
    {'t':3, 'X':0.10, 'Y': 0.40}, 
    {'t':2, 'X':400, 'Y': 400}, 
    {'t':3, 'X':0.20, 'Y': 0.10}, 
] 

Я должен написать код, создать новый словарь, например, что для каждого t, X и Y суммируются. Затем каждый t должен появляться только один раз (в хронологическом порядке), и суммы, принадлежащие одному и тому же t, должны быть суммированы вместе. Результат должен быть примерно таким:

B=[{'t':1, 'SUM':55}, 
    {'t':2, 'SUM':800}, 
    {'t':3, 'SUM':0.80}, 
    {'t':4, 'SUM':5500}, 
] 

Пожалуйста, кто-нибудь может мне помочь?

+0

Так начните со словарем, чтобы отслеживать суммы, с 'Т * в качестве ключа. Затем, после того как вы собрали суммы, создайте свои отдельные словари. –

+0

@ Dhy12 вы должны принять ответ, если он вам помог. :) –

ответ

1
>>> A=[{'t':1, 'X':10, 'Y': 15}, 
... {'t':4, 'X':2500, 'Y': 3000}, 
... {'t':1, 'X':20, 'Y': 10}, 
... {'t':3, 'X':0.10, 'Y': 0.40}, 
... {'t':2, 'X':400, 'Y': 400}, 
... {'t':3, 'X':0.20, 'Y': 0.10}, 
... ] 
>>> my_dict = {} 
>>> for d in A: 
...  my_dict.update({d['t']: my_dict.pop(d['t'],0) + d['Y'] + d['X']}) 
... 
>>> my_dict 
{1: 55, 2: 800, 3: 0.8, 4: 5500} 
>>> my_list=[] 
>>> for k in sorted(my_dict.keys()): 
...  my_list.append({"t":k,"SUM":my_dict[k]}) 
... 
>>> my_list 
[{'SUM': 55, 't': 1}, {'SUM': 800, 't': 2}, {'SUM': 0.8, 't': 3}, {'SUM': 5500, 't': 4}] 
>>> 
+0

Не думаю, что я использовал бы «обновление» или «поп» в этом первом цикле. Эквивалентная строка 'my_dict [d ['t']] = my_dict.get (d ['t'], 0) + d ['Y'] + d ['X']' выглядит намного приятнее. Помимо этого шага, это, безусловно, лучший способ решить проблему. – Blckknght

0

Вы можете сделать что-то подобное.

A=[{'t':1, 'X':10, 'Y': 15}, 
    {'t':4, 'X':2500, 'Y': 3000}, 
    {'t':1, 'X':20, 'Y': 10}, 
    {'t':3, 'X':0.10, 'Y': 0.40}, 
    {'t':2, 'X':400, 'Y': 400}, 
    {'t':3, 'X':0.20, 'Y': 0.10}, 
] 

output_dict = {} 
for item in A: 
    if item['t'] in output_dict: 
     output_dict[item['t']] += item['X'] + item['Y'] 
    else: 
     output_dict[item['t']] = item['X'] + item['Y'] 

output_list = [] 
for key in sorted(output_dict.keys()): 
    output_list.append({"t":key, "SUM":output_dict[key]}) 

for item in output_list: 
    print(item) 

Он выводит:

{'t': 1, 'SUM': 55} 
{'t': 2, 'SUM': 800} 
{'t': 3, 'SUM': 0.8} 
{'t': 4, 'SUM': 5500}