过滤字符串列表

时间:2020-03-11 12:14:13

标签: python dictionary

我有一个执行此操作的python代码:

  1. 读取文件
  2. 转换为字典
  3. 过滤字典中的某些参数

这是字典的类型:

{'ID1':['100,Cat','100,Cat1','100,Cat2','100,Cat3','99.4,Dog','99.4,Dog1','99.4,Dog3','100,Cat5','100,Cat6']}

现在我必须过滤字典的值:

1-根据%进行过滤:因此,我确定了%的第一个值,在本例中为100,裕度为0.05。据此,我会得到

['100,Cat','100,Cat1','100,Cat2','100,Cat3']

所以我做了这段代码:

for keys_ID in dictionary.keys():
    list_2 = []
    list_ID = []
    treshold = dictionary[keys_ID][0].split(',')[0]
    for thre in dictionary[keys_ID]:
        thre_split_ID = thre.split(',')[0]
        thre_split_species = thre.split(',')[1].rstrip('\n')
        if float(thre_split_ID) >= float(treshold) - 0.05 and float(thre_split_ID) <= float(treshold) + 0.05:
            if thre_split_species not in list_2:
                list_2 .append(thre_split_species )
                list_ID.append(thre_split_ID)

但是,这段代码给了我以下输出:

['100,Cat','100,Cat1','100,Cat2','100,Cat3','100,Cat5','100,Cat6']

在这种情况下,代码返回的值具有相同的%。

这是所需的输出:['100,Cat','100,Cat1','100,Cat2','100,Cat3']

谁能告诉我只获得最初相同结果的方法吗?谢谢

1 个答案:

答案 0 :(得分:0)

根据我对问题的理解,您正在寻找的值在第一个值的0.5以内,直到您找到一个不同的值。为此,您可以将else: break添加到if条件中,以检查阈值以停止循环

或者,您可以使用例如itertools.takewhile

from itertools import takewhile

val = lambda x: float(x.split(",")[0])
dictionary = {'ID1':['100,Cat','100,Cat1','100,Cat2','100,Cat3','99.4,Dog','99.4,Dog1','99.4,Dog3','100,Cat5','100,Cat6']}
for ID in dictionary.keys():
    first, *rest = dictionary[ID]
    filtered = [first, *takewhile(lambda x: abs(val(first) - val(x)) < 0.5, rest)]
    print(filtered)

输出:

['100,Cat', '100,Cat1', '100,Cat2', '100,Cat3']
相关问题