如何在2元组的集合中找到具有特定第一个元素的2元组?

时间:2018-12-26 05:02:45

标签: python set pattern-matching tuples

我有一组类型为(str,int)的对。我将找到包含特定字符串的元组,然后将对应的整数加1。我知道如何通过询问是否myTuple in mySet在集合中找到元组。但是我不知道如何处理这种情况。我将不胜感激。

这是一个示例集:

from sets import Set
up = 2
down = 3
right = 1
left = 2
mySet = Set([("up",up),("down",down),("right",right),("left",left)])

mySet说,我想将其第一个元素为"up"的一对中的第二个递增1,所以我需要类似

if ("up",ref) in mySet:
    ref += 1 

这样做,我想同时增加原始变量up的值和元组的第二个元素。

2 个答案:

答案 0 :(得分:1)

我建议您使用字典。这样,对新计数的重新分配将更加干净并且易于解释。例如:

>>> my_set = { 'up': 0, 'down': 0, 'left': 0, 'right': 0 }
>>> my_set['up'] += 1
>>> my_set
{'up': 1, 'down': 0, 'left': 0, 'right': 0}

正如Brian所描述的,元组是不可变的,因此每次更新计数时,都必须使用更新后的计数创建一个新的元组。然后可以使用它替换旧的元组。

答案 1 :(得分:0)

您可以使用filter方法在条件中查找集合中的所有条目,在这种情况下,第一个为“ up”的条件为true。

subset = list(filter(lambda x: x[0] == "up", mySet))
for entry in subset:
    mySet.remove(entry)
    newEntry = (entry[0],(entry[1]+1))
    mySet.add(newEntry)
    up +=1 

您不能使用entry+=1,因为元组在python中是不可变的