检查dict中的值是否为空?

时间:2015-01-13 00:40:50

标签: python

我有这样的字典theaterinfo

 "Showtimes":{
        "New York": [
            {
                "Times": {}, 
                "theaterid": 61, 
            }
        ]
        "Ohio": [
            {
                "Times": {'2015-01-10',
                          '2015-01-11'}, 
                "theaterid": 1, 
            }
        ]
    }    

如果Times为空,我怎么能处理它,不打印出来?

2 个答案:

答案 0 :(得分:2)

空字典的计算结果为布尔值False,而非空字典的计算结果为True,因此您可以编写

if my_dict['Times']:
    print(my_dict['Times'])

答案 1 :(得分:1)

您需要遍历dict["Showtimes"]项,然后使用dict键访问列表中的Times,并使用if为空dict返回False。

d = {"Showtimes":{
        "New York": [
            {
                "Times": {},
                "theaterid": 61,
            }
        ],
        "Ohio": [
            {
                "Times": {'2015-01-10',
                          '2015-01-11'},
                "theaterid": 1,
            }
        ]
    }}

for k,v in d["Showtimes"].iteritems():
    if v[0]["Times"]:
       print(k,v)
('Ohio', [{'theaterid': 1, 'Times': set(['2015-01-10', '2015-01-11'])}])

要注意的一件事是,如果你有0之类的值,这也将返回False,所以如果你只想检查值是否为空dict,请使用if v[0]["Times"] != {}

如果要检查Times的所有值,并且只打印完整的dict,如果没有空Times值,则可以使用所有在第一次出现空值时短路的值:

if all(v[0]["Times"] for v in d["Showtimes"].itervalues()):
    print(d)

或用任何反转逻辑:

if not any(not v[0]["Times"] for v in d["Showtimes"].itervalues()):
    print(d)

如果有可能某个词典未获得Times密钥,请使用v[0].get("Times",1)