我有这个字典,我想用Id编制一个列表..如果他们的hasCategory是True。
categories = [{'Id': 1350, 'hasCategory': True},
{'Id': 113563, 'hasCategory': True},
{'Id': 328422, 'hasCategory': False}]
在此示例中,我的结果列表应为此
list = [1350, 113563]
我正在尝试上面的代码
list =[]
for item in categories:
if item.hasCategory is True:
list.push(item.Id)
但是当我尝试运行我的应用程序时,我遇到了错误
for item in categories
^
SyntaxError: invalid syntax
答案 0 :(得分:8)
代码中发现的基本问题
您实际上需要使用:
来标记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"])
除此之外,检查变量是否为Truthy的Pythonic方法只是
if expression:
这就是为什么我们不检查
if item["hasCategory"] == True:
或
if item["hasCategory"] is True: # Never use `is` to compare values
引用PEP-8,Python Code样式指南,
不要使用
True
将布尔值与False
或==
进行比较。Yes: if greeting: No: if greeting == True: Worse: if greeting is True:
解决此问题的最佳方法是使用带有过滤条件的list comprehension,例如
>>> [item["Id"] for item in categories if item["hasCategory"]]
[1350, 113563]
它将根据您的旧迭代创建一个新列表,在本例中为categories
。
答案 1 :(得分:2)
你可以在这里使用list_comprehension。
>>> categories= [{ 'Id': 1350, 'hasCategory': True},
{ 'Id': 113563, 'hasCategory': True},
{ 'Id': 328422, 'hasCategory': False}]
>>> [i['Id'] for i in categories if i['hasCategory'] == True]
[1350, 113563]
答案 2 :(得分:0)
你的循环之后你应该有“:”:
for item in categories: