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

时间:2014-09-15 01:49:34

标签: 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]

然而,这段代码一直给我一个错误,可能是因为每个项目中都没有键'b'。

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

for item in my_dict[documents]:
    if not item[b]:
        print "NONE"
    else:
        print item[b]

这似乎不起作用。我需要在代码中进行哪些更改才能使其正常工作?

谢谢,

4 个答案:

答案 0 :(得分:1)

您的代码存在多个问题,以及多种修复方法。以下是一组相当少的更改:

  1. 您定义数据结构的方式是指变量abdocuments。我猜你的意思是使用文字字符串代替:

    my_dict= { "documents" : [{"a":1,"b":2},
                           {"a":3},
                           {"a":4,"b":5}
                          ]
             }
    
  2. 假设(1)是正确的,d[key]将始终提出KeyError如果字典中没有key,至少对于标准dict }类。一种解决方案是使用d.get(key, DEFAULTVALUE) will substitute a specified default value for a missing key。关闭当前代码的解决方案如下:

    for item in my_dict["documents"]:
        if "b" in item:
            print item["b"]
        else:
            print "NONE"
    

答案 1 :(得分:0)

在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不同,如果您执行{a: b}a将自动转换为字符串。

您可以使用get方法缩短代码,如果dict中不存在提供的密钥,则可以指定默认值:

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

答案 2 :(得分:0)

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

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

出于其他目的,您可以使用in查看密钥是否存在:

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

答案 3 :(得分:0)

这有效:

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]