Giv*_* IT 0 python dictionary for-loop list
我有这个词典,我想用Id编制一个列表..如果他们的hasCategory是True.
categories = [{'Id': 1350, 'hasCategory': True},
{'Id': 113563, 'hasCategory': True},
{'Id': 328422, 'hasCategory': False}]
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我的结果列表应该是这个
list = [1350, 113563]
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用上面的代码
list =[]
for item in categories:
if item.hasCategory is True:
list.push(item.Id)
Run Code Online (Sandbox Code Playgroud)
但是当我试图运行我的应用程序时,我遇到了错误
for item in categories
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
代码中发现的基本问题
实际上你需要用来:标记结尾if和for语句,就像这样
不要使用任何内置名称作为变量名称.在这种情况下,list.
要从字典中获取值,您只需要使用["key"]方法获取它.点符号不起作用.
所以你的固定代码看起来像这样
result = [] # list is a built-in name. Don't use that
for item in categories: # : at the end
if item["hasCategory"]: # : at the end
result.push(item["Id"])
Run Code Online (Sandbox Code Playgroud)
除此之外,用于检查变量是否为Truthy的Pythonic方法就是
if expression:
Run Code Online (Sandbox Code Playgroud)
这就是为什么我们不检查
if item["hasCategory"] == True:
Run Code Online (Sandbox Code Playgroud)
要么
if item["hasCategory"] is True: # Never use `is` to compare values
Run Code Online (Sandbox Code Playgroud)
引用PEP-8,Python代码风格指南,
不要将布尔值与之比较
True或False使用==.Run Code Online (Sandbox Code Playgroud)Yes: if greeting: No: if greeting == True: Worse: if greeting is True:
解决此问题的最佳方法是使用列表理解和过滤条件,如下所示
>>> [item["Id"] for item in categories if item["hasCategory"]]
[1350, 113563]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它将根据您的旧迭代创建一个新列表categories.