我有一份包含结构学生数据的列表列表 - [('100', 'class 1'), ('110', 'class 2'), ('1030', 'class 2'),.....]
。我从使用此命令获得的结构:
student_class = student.map(lambda x:x).zip(class)
现在我想将学生分数添加到上面列表列表的每个元素中,以便输出变为:
[('100', 'class 1',score1), ('110', 'class 2',score2), ('1030', 'class 2',score3),.....]
学生分数出现在名为score
的列表中。如何将分数添加到上述student_class
列表中,以使其成为student_classScore
列表?
答案 0 :(得分:4)
由于tuple
tuple
和(score,)
是不可变的,因此您需要通过使用单元素元组集中现有元组来创建新元组(已创建)通过l = [('100', 'class 1'), ('110', 'class 2'), ('1030', 'class 2')]
scores = [1, 2, 3]
new_list = []
for tup, score in zip(l, scores):
new_list.append(tup + (score,))
print new_list
>> [('100', 'class 1', 1), ('110', 'class 2', 2), ('1030', 'class 2', 3)]
),然后将新创建的元组附加到新列表。
for index, tup in enumerate(l):
l[index] = tup + (scores[index],)
print l
>> [('100', 'class 1', 1), ('110', 'class 2', 2), ('1030', 'class 2', 3)]
另一种但不知何故不那么pythonic的方式,但相同的概念:
messages: {
required: "Veuillez saisir un numéro de téléphone",
digits:"Veuillez saisir des chiffres"
}
答案 1 :(得分:1)
由于您使用了spark,因此您可以在spark中使用zip
和map
来附加分数。
student_RDD = sc.parallelize(['100', '110', '1030'])
class_RDD = sc.parallelize(['class1', 'class2', 'class2'])
score_RDD = sc.parallelize([1, 2, 3])
student_class_RDD = student_RDD.zip(class_RDD) # There is no need to map first
student_class_RDD.zip(score_RDD).map(lambda x: x[0] + (x[1],)).collect()
输出:
[('100', 'class1', 1), ('110', 'class2', 2), ('1030', 'class2', 3)]
我认为使用spark解决方案更合适,而不是纯python解决方案,特别是当数据很大时,这就是你使用spark的原因吧?