python将两个不同的列表合并为一个

时间:2017-10-09 11:48:51

标签: python

我有两个不同的考试,不同的考试成绩。 我将两个测试存储在一个单独的列表中。如何合并两个列表并获得最终结果?

returnn = sorted(returnscore, key=itemgetter('score'), reverse=True) 
for rij in returnn:
    print rij

输出:

{'E-mail': 'tim@gmail.com', 'score': 10}
{'E-mail': 'tim@gmail.com', 'score': 10}
{'E-mail': 'tim@gmail.com', 'score': 10}
{'E-mail': 'tim@gmail.com', 'score': 10}
{'E-mail': 'hihallo@gmail.com', 'score': 5}
{'E-mail': 'noreply@com', 'score': 5}
{'E-mail': 'marketing@nl', 'score': 5}

spff = sorted(spfscore, key=itemgetter('score'), reverse=True) 
for rij in spff:
    print rij

输出:

{'E-mail': 'tim@gmail.com', 'score': 3}
{'E-mail': 'tim@gmail.com', 'score': 0}
{'E-mail': 'tim@gmail.com', 'score': 7}
{'E-mail': 'tim@gmail.com', 'score': 0}
{'E-mail': 'hihallo@gmail.com', 'score': 0}
{'E-mail': 'noreply@com', 'score': 0}
{'E-mail': 'arketing@nl', 'score': 1}

我想要的输出是:

{'E-mail': 'tim@gmail.com', 'score': 50}
{'E-mail': 'hihallo@gmail.com', 'score': 5}
{'E-mail': 'noreply@com', 'score': 5}
{'E-mail': 'arketing@nl', 'score': 6}

我一直试图解决这个问题几个小时。我只是不明白 我如何计算分数并删除重复后的内容。

2 个答案:

答案 0 :(得分:2)

一种简单的方法是简单地创建一个新的dict对象,其中包含电子邮件地址作为其(唯一)键,然后遍历列表,如果元素已经在,则递增分数计数列表,或者如果电子邮件地址尚未出现在dict中,则创建带有分数的dict条目。

scores_raw = [{'E-mail': 'tim@gmail.com', 'score': 10},
{'E-mail': 'tim@gmail.com', 'score': 10},
{'E-mail': 'tim@gmail.com', 'score': 10},
{'E-mail': 'tim@gmail.com', 'score': 10},
{'E-mail': 'hihallo@gmail.com', 'score': 5},
{'E-mail': 'noreply@com', 'score': 5},
{'E-mail': 'marketing@nl', 'score': 5}]

scores_unique = {}
for item in scores_raw:
    if item['E-mail'] not in scores_unique:
        scores_unique.update({item['E-mail']: item['score']})
    else:
        scores_unique[item['E-mail']] += item['score']

print (scores_unique)

输出:{'tim@gmail.com': 40, 'hihallo@gmail.com': 5, 'noreply@com': 5, 'marketing@nl': 5}

答案 1 :(得分:0)

使用来自itertools的groupby的另一种方法

PROC COMPARE

结果:

%macro   Validate(dataset);
**********************************
*** Import
**********************************;  
  data live_&dataset.;
    set inFinal.&dataset.;
  run;

**********************************
*** Arrange for PROC COMPARE
**********************************;
  proc sort data = &dataset. out = validation_refactor;
    by _all_;
  run;

  proc sql noprint;
    select name
    into : refactorVariableOrder
    separated by ' '
    from dictionary.columns
    where libname = 'WORK'
      and memname = "%upcase(&dataset.)"
    ;
  quit;

  proc sort data = live_&dataset. out = validation_original;
    by &refactorVariableOrder.;
  run;

**********************************
*** Validate
**********************************;
  proc compare error note 
    base      = validation_original
    compare   = validation_refactor
    ;
  run;
%mend;