我想要一份在他们的 shopCart 中有东西的成员的列表。请看下面的例子:users=[ {"name":"John","age":18,"shopCart":["Python","Csharp","Java"]}, {"name":"Ellen","age":19,"shopCart":[]}, {"name":"Eric","age":21,"shopCart":["Python","Java"]}, {"name":"Jennifer","age":20,"shopCart":[]} ]buyUsers = map(lambda user:user["name"], filter(lambda user:user["shopCart"],users))print(list(buyUsers))['John','Eric']上面的代码运行良好并给出了我想要的答案,但我是在互联网上找到的。我的问题是为什么不能使用 thisfilter()而不是map(),换句话说,我的意思是为什么下面的代码不只给出在他们的 shopCart 中有东西的用户的名字? buyUsers = filter(lambda user:user["name"], filter(lambda user:user["shopCart"],users)) print(list(buyUsers)) [{'shopCart': ['Python', 'Csharp', 'Java'], 'name': 'John', 'age': 18}, {'shopCart': ['Python', 'Java'], 'name': 'Eric', 'age': 21}]
2 回答
白衣非少年
TA贡献1155条经验 获得超0个赞
您在互联网上找到的代码:
buyUsers = map(lambda user:user["name"], filter(lambda user:user["shopCart"],users))
说:在所有的 中users,找到那些在 中有东西的user["shopCart"],然后就给我user["name"]。
您的修改:
buyUsers = filter(lambda user:user["name"], filter(lambda user:user["shopCart"],users))
说:在所有的usersfind 中,找到那些在 中有东西的user["shopCart"],然后在那些中,返回users一个user["name"]
简而言之,您的第二个过滤器什么都不做(在您提供的数据的情况下)但让所有用户通过。
您可能缺少的关键信息是考虑了空项falsy。请参阅下面的示例代码:
items = ["a", "", [1], []]
for item in items:
print(item, bool(item))
输出:
a True
False
[1] True
[] False
添加回答
举报
0/150
提交
取消