python:在字典列表的列表中搜索



我想遍历一个字典列表的列表:

data = [
{'name': 'sravan'},
{'name': 'bobby'},
{'name': 'ojsawi', 'number': '123'},
{'name': 'rohith', 'number': '456'},
{'name': 'gnanesh', 'number': '123'}
]

此外,我想检查每个条目是否有一个值为123的键号。如果是这样,我想把这个条目的name的值附加到一个新的列表中在上面的例子中就是'ojsawi''gnanesh'。否则,我想在新列表中添加0。

这意味着,带有附加值的最终new_list应该是这样的:new_list = {0, 0, 'ojsawi', 0, 'gnanesh'}

我已经尝试了2D循环和lambdas等不同的版本/可能性,但我认为主要问题是列表有不同的大小。任何帮助/提示将不胜感激。

您可以使用列表推导式定义它,其中嵌套if/else:

new_list = [x.get('name') if x.get('number') == '123' else 0 for x in data]

输出:

[0, 0, 'ojsawi', 0, 'gnanesh']

除了列表推导之外,如果您愿意,还可以使用map()和函数式编程来实现它。注意,如果你使用for循环,map()返回一个迭代器,它会在你运行时生成东西,所以如果你想立即得到整个结果,请在map()函数周围使用list()

def zerofilter(my_dict):
number = my_dict.get("number")
if number != "123":
return 0
else:
return my_dict.get("name")
data = [
{'name': 'sravan'},
{'name': 'bobby'},
{'name': 'ojsawi', 'number': '123'},
{'name': 'rohith', 'number': '456'},
{'name': 'gnanesh', 'number': '123'}
]
print(list(map(zerofilter, data))) # output is [0, 0, 'ojsawi', 0, 'gnanesh']
# You can also do this:
for res in map(zerofilter, data):
print(res)

相关内容

  • 没有找到相关文章

最新更新