如何从列表中删除空字符串,该空字符串是字典列表中特定键的值?

时间:2019-05-20 14:52:22

标签: python

鉴于我是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)

但是他们都不能解决我的问题。

4 个答案:

答案 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']))