Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python检查项目是否存在,然后打印项目_Python_List_If Statement - Fatal编程技术网

python检查项目是否存在,然后打印项目

python检查项目是否存在,然后打印项目,python,list,if-statement,Python,List,If Statement,我有一本这样的词典: my_dict= { documents : [{a:1,b:2}, {a:3}, {a:4,b:5} ] } 我只想打印b的值 这是我的密码: for item in my_dict[documents]: print item[b] 但是,这段代码一直给我一个错误,可能

我有一本这样的词典:

   my_dict= { documents : [{a:1,b:2},
                           {a:3},
                           {a:4,b:5}
                          ]
             }
我只想打印b的值

这是我的密码:

for item in my_dict[documents]:
    print item[b]
但是,这段代码一直给我一个错误,可能是因为每个项中都不存在键“b”

我更改了代码以考虑例外情况:

for item in my_dict[documents]:
    if not item[b]:
        print "NONE"
    else:
        print item[b]
这似乎不起作用。我需要在代码中更改什么才能使其正常工作


谢谢,

在Python中,您不能执行
{key:0}
——相反,您需要执行
{'key':0}
(将键设置为字符串、数字或以前定义的某个对象)

代码的固定版本如下所示:

my_dict= { 
    'documents' : [
        {'a': 1, 'b': 2},
        {'a': 3},
        {'a': 4, 'b': 5}
    ]
}

for item in my_dict['documents']:
    if 'b' in item:
        print item['b']
    else:
        print 'NONE'
请注意,此行为不同于Javascript,在Javascript中,如果执行
{a:b}
a
将自动转换为字符串

您可以使用
get
方法缩短代码,该方法允许您在dict中不存在提供的键时指定默认值:

for item in my_dict['documents']:
    print item.get('b', 'NONE')

您可以使用
.get
获取默认值:

出于其他目的,您可以使用中的
查看该键是否存在:

if 'b' in item:
    print "item['b'] exists!"

您的代码有多个问题,有多种方法可以解决。下面是一组相当小的更改:

  • 您定义数据结构的方式是指变量
    a
    b
    文档
    。我猜您的意思是使用文字字符串:

    my_dict= { "documents" : [{"a":1,"b":2},
                           {"a":3},
                           {"a":4,"b":5}
                          ]
             }
    
  • 假设(1)是正确的,
    d[key]
    如果字典中没有出现
    key
    ,至少对于标准
    dict
    类而言,
    d[key]
    将始终引发
    key错误。一种解决方案是使用
    d.get(key,DEFAULTVALUE)
    which。与当前代码相近的解决方案如下:

    for item in my_dict["documents"]:
        if "b" in item:
            print item["b"]
        else:
            print "NONE"
    
  • 这项工作:

    DoLoD=my_dict= { 'documents' : [{'a':1,'b':2},
                           {'a':3},
                           {'a':4,'b':5}
                          ]
             }
    
    for k, l in DoLoD.items():
        for d in l:
            if 'b' in d:
                print d['b']  
    
    或者更简洁地说:

    >>> [d['b'] for k, l in DoLoD.items() for d in l if 'b' in d] 
    [2, 5]         
    

    你的代码很好。您只需要在定义键和使用键提取值时用单引号将键括起来。您确实需要包含
    if
    语句来检查密钥是否存在。Zaphod,关于缺少预期的引号,您可能是对的,但是OP的代码在第二个字典(
    {“a”:3}
    )上无论如何都会失败,因为它不包含密钥
    “b”
    @DanLenski。这就是为什么需要检查钥匙的原因<代码>如果项中的“b”为“
    ”。是,但OP的当前代码未正确检查密钥是否存在
    if d[missing_key]:…
    将在Python的标准
    dict
    类中引发错误,这是经过设计的。见下文。
    >>> [d['b'] for k, l in DoLoD.items() for d in l if 'b' in d] 
    [2, 5]