假设我有一个这样的列表:
[{'name': 'Blah1', 'age': x}, {'name': 'Blah2', 'age': y}, {'name': None, 'age': None}]
保证'name'和'age'值都可以填充或为空。
我试过了:
for person_dict in list:
if person_dict['name'] == None:
list.remove(person_dict)
但显然这不起作用,因为for循环有时会跳过索引而忽略了一些空白的人。
我对Python比较陌生,我想知道是否有一个列表方法可以定位具有与键相关联的特定值的dicts。
编辑:修复了元组符号列表为注释指出
答案 0 :(得分:1)
您可以将列表理解用作此类
的过滤器[c_dict for c_dict in dict_lst if all(c_dict[key] is not None for key in c_dict)]
这将确保您只获得所有值都不是None
的词典。
答案 1 :(得分:1)
只测试dict值中None
的存在,以测试None
值的所有dict键:
>>> ToD=({'name': 'Blah1', 'age': 'x'}, {'name': 'Blah2', 'age': 'y'}, {'name': None, 'age': None})
>>> [e for e in ToD if None not in e.values()]
[{'age': 'x', 'name': 'Blah1'}, {'age': 'y', 'name': 'Blah2'}]
或者,使用过滤器:
>>> filter(lambda d: None not in d.values(), ToD)
({'age': 'x', 'name': 'Blah1'}, {'age': 'y', 'name': 'Blah2'})
或者,如果它是'name'的有限测试:
>>> filter(lambda d: d['name'], ToD)
({'age': 'x', 'name': 'Blah1'}, {'age': 'y', 'name': 'Blah2'})
答案 2 :(得分:0)
for index,person_dict in enumerate(lis):
if person_dict['name'] == None:
del lis[index]
您也可以尝试
lis=[person_dict for person_dict in lis if person_dict['name'] != None]
永远不要将List
用作变量
答案 3 :(得分:0)
您可以使用已接受的数据创建新列表。如果你有元组,那么你必须创建新的列表。
列表理解可能会更快,但这个版本对于初学者来说更具可读性。
data = ({'name': 'Blah1', 'age': 'x'}, {'name': 'Blah2', 'age': 'y'}, {'name': None, 'age': None})
new_data = []
for x in data:
if x['name']: # if x['name'] is not None and x['name'] != ''
new_data.append(x)
print new_data