我有一个数据集作为列表。从该列表中,我需要找到一个关键字,如果找到了关键字,我应该能够提取该元素的完整信息。
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)
答案 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的更多信息。