例如,我有这个元组:
data =(('name/score','game1', 'game2', 'game3', 'game4', 'game5'),('A','1','2','3','4','5'),('B','6','7','8','9','10'),('C','11','12','13','14','15'))
所以数据是一个包含4个包含字符串的较小元组的元组。 实际上,数据是一个“表格”,显示名称A,B,C和D以及它们各自的分数。 如何操纵数据,以便我在数据中想要额外的信息?
例如, 1.如何将数据拆分为较小的元组,如
tuple1 = ('name/score','game1', 'game2', 'game3', 'game4', 'game5')
tuple2 = ('A','1','2','3','4','5')
等等?
如何删除每个较小元组中的'名称',即A,B和C? 我是通过切片来做到的:
newtuple = tuple1[1:]
只是想知道是否有递归方式或迭代方式来做,因为我真的不知道迭代和递归。
答案 0 :(得分:1)
data =(('name/score','game1', 'game2', 'game3', 'game4', 'game5'),('A','1','2','3','4','5'),('B','6','7','8','9','10'),('C','11','12','13','14','15'))
元组的第一个元素是一种标题(就像excel文件中的第一行一样)。 你想构建一个字典字典,其中第一级键是用户(A,B,C等),第二级字典有像game1,game2等键,其值代表在给予比赛。
D = dict((t[0], dict(zip(data[0][1:], t[1:]))) for t in data[1:])
dict(zip(data [0] [1:],t [1:]))是从每个元组数据(开始第二个元组)创建字典的部分值使用来自第一个数据元组的键(" game1"," game2"等)。我们故意忽略所有元组的第一个元素:" name / score"被忽略,用户名" A"," B"等也被忽略。
然后我们"附上"上面获得的每个字典到一个用户名的密钥:(t [0],dict(zip .... ,我们获得一个元组。
最后从元组列表中我们使用dict builtin函数创建一个字典。
上面的代码会将您输入的元组元组转换为字典词典,如:
{'A': {'game1': '1', 'game2': '2', 'game3': '3', 'game4': '4', 'game5': '5'},
'B': {'game1': '6', 'game2': '7', 'game3': '8', 'game4': '9', 'game5': '10'},
'C': {'game1': '11', 'game2': '12', 'game3': '13', 'game4': '14', 'game5': '15'}}
要在game3中获得用户A的分数,请写下:
>>D["A"]["game3"]
3
由于您评论说您不想使用词典,因此这里有一个功能可以满足您的需求:
def get_score(D, user, game):
i = D[0].index(game)
for t in D[1:]:
if t[0] == user:
return t[i]
print get_score(data, "A", "game3")