如何连接来自for循环/功能的输出数据

时间:2019-08-13 12:04:23

标签: python python-3.x python-2.7

我有一个数据集作为列表。从该列表中,我需要找到一个关键字,如果找到了关键字,我应该能够提取该元素的完整信息。

att =['Email/xyz@gmail.com', 'CountryCode/US','CountryCode/UK', 'ID/12345']

从上面的列表中,如果我仅搜索CountryCode,则输出应为:

['CountryCode/US','CountryCode/UK']

下面是我正在尝试的代码,但它仅返回单个值。

有人可以帮助我处理此代码,以将所有值返回为:

['CountryCode/US','CountryCode/UK']
def att_func(field,data):
    for i, j in enumerate(data):
        # print(i,j)
        if field in j:
            return [data[i]]


att =['Email/xyz@gmail.com', 'CountryCode/US','CountryCode/UK', 'ID/12345']

field ='CountryCode'

Cntry = att_func('CountryCode',att)
print(Cntry)

3 个答案:

答案 0 :(得分:2)

您将在for循环中尽早返回,因此您永远不会越过字段存在的第一个位置,可以使用yield而不是return并使函数返回生成器或只使用列表理解

def att_func(field, data):
    return [i for i in data if field in i]

答案 1 :(得分:0)

原因:这是因为您将在获取单个数据后立即返回。

解决方案:收集列表中的所有数据并返回收集的数据。

尝试:

def att_func(field,data):
    final_data = []
    for i, j in enumerate(data):
        # print(i,j)
        if field in j:
            final_data.append(data[i])
    return final_data


att =['Email/xyz@gmail.com', 'CountryCode/US','CountryCode/UK', 'ID/12345']

field ='CountryCode'

Cntry = att_func('CountryCode',att)
print(Cntry)

答案 2 :(得分:0)

att = ['Email/xyz@gmail.com', 'CountryCode/US','CountryCode/UK', 'ID/12345']
out = [item for item in att if "CountryCode" in item]

完成!

您的att_func应该如下所示:

def att_func(needle, haystack):
    return [item for item in haystack if needle in item]

有关list comprehensions的更多信息。