如何操作包含多个元组的元组

时间:2015-10-08 09:01:28

标签: python tuples

例如,我有这个元组:

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')

等等?

  1. 如何删除每个较小元组中的'名称',即A,B和C? 我是通过切片来做到的:

    newtuple = tuple1[1:]

  2. 只是想知道是否有递归方式或迭代方式来做,因为我真的不知道迭代和递归。

    1. 无论如何定义一个可以检索我想要的数据的函数? 例如,我想知道在游戏3中得分为A,该函数应该返回“3”。

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")