基于满足条件的字典中的值创建列表

时间:2015-03-06 08:23:29

标签: python list for-loop dictionary

我有这个字典,我想用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

3 个答案:

答案 0 :(得分:8)

代码中发现的基本问题

  1. 您实际上需要使用:来标记iffor语句的结尾,例如

  2. 不要使用任何内置名称作为变量名称。在这种情况下,list

  3. 要从字典中获取值,您只需使用["key"]方法获取该值。点符号不起作用。


  4. 所以你的固定代码看起来像这样

    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: