Python,如果值相同,则只获得一个值

时间:2017-10-18 05:17:27

标签: python list loops

我试图找到类似我现在想问的类似问题。但是,答案并没有真正帮助我。我试图获得价值,但只有一个值,如果价值相同。在这里我的代码:

首先,我有这样的条件

ids_data = []
arr_rest_ids = [('8380128579', 309), ('8380128579', 311), ('8380128579', 310), ('8380222579', 313)]

if arr_rest_ids:
    for i in arr_rest_ids:
        ids_data.append(i)

我有条件字符串和整数,条件告诉整数有一个值。我试图创建一个条件,如果值相同而不是只获得一个值。

我希望结果如下:

ids_data = [309, 313]
arr_rest_ids = [('8380128579', 309), ('8380128579', 311), ('8380128579', 310), ('8380222579', 313)]

if arr_rest_ids:
    for i in arr_rest_ids:
        ids_data.append(i)

ids_data变量显示id只是一个不同的值。

1 个答案:

答案 0 :(得分:2)

最简单的方法是维护一组您所看到的值:

arr_rest_ids = [('8380128579', 309), ('8380128579', 311), ('8380128579', 310), ('8380222579', 313)]
ids_data = []
seen = set()

# no check needed here. If arr_rest_ids is empty, the loop won't start
for x, y in arr_rest_ids:
    if x not in seen:
        ids_data.append(y)
        seen.add(x) 

在Python3中,你也可以使用这个hack在更少的行中实现相同的目标:

seen = set()
ids_data = [seen.add(x) or y for x, y in arr_rest_ids if x not in seen]