鉴于我是Python的新手,并且具有社会科学背景,因此我将尽力解释这个问题,并在此先感谢您的宝贵帮助!
我有一个字典列表,其中存储在线食谱信息。对于特定的键['ingredients']
,我有一个字符串列表作为值。我想通过删除空字符串来清理列表。
以下是我的数据的示例:
data = [{'title': 'Simple Enchiladas Verdes',
'prep_time': '15 min',
'cook_time': '30 min',
'ingredients': ['', 'chicken', '','','','tomato sauce']
},
{...}, {...}]
我想要获得的关键“成分”的结果是:
data = [{'title': 'Simple Enchiladas Verdes',
'prep_time': '15 min',
'cook_time': '30 min',
'ingredients': ['chicken','tomato sauce']
},
{...}, {...}]
我尝试了不同的代码:
for dct in data:
for lst in dct['ingredients']:
for element in lst:
if element == '':
dct['ingredients'] = lst.remove(element)
for dct in current_dict:
for lst in dct['ingredients']:
dct['ingredients'] = list(filter(lambda x: x!=''))
for dct in data:
for lst in dct['ingredients']:
for x in lst:
if x == "":
dct['ingredients'] = lst.remove(x)
但是他们都不能解决我的问题。
答案 0 :(得分:1)
使用filter
的最快方法:
for dct in data:
dct['ingredients'] = list(filter(None, dct['ingredients']))
答案 1 :(得分:0)
您非常亲密。您只需要这样做:
IgniteConfiguration
这里发生的是,对于for dct in data:
dct['ingredients'] = list(filter(lambda x: x != '', dct['ingredients']))
中的每个字典dct
,您将data
并通过谓词{{1}传递给dct['ingredients']
函数}。结果是“可迭代”,从中可以一次获得一个元素。然后,您可以在该列表上使用filter
来获取适当的列表,并将结果分配回lambda x: x != ''
来替换原始列表。
答案 2 :(得分:0)
您可以使用列表理解:
for dct in data:
dct['ingredients'] = [el for el in dct['ingredients'] if el != '']
答案 3 :(得分:0)
尝试
def removeEmtyItems(liste, copyliste):
for item in copyliste:
if item=="":
liste.remove(item)
return liste
for dict in data:
for value in dict.values():
if isinstance(value, list):
copyliste=list(value)
removeEmtyItems(value, copyliste)
print(data)
或者只是
for dct in data:
dct['ingredients'] = list(filter(lambda x: x != '', dct['ingredients']))