使用all()函数

时间:2017-04-13 22:43:50

标签: python-3.x dictionary

我使用Python 3

我想检查嵌套字典中的所有测试值是否都为非。

所以这是简化的例子dict:

d = {'a': {'1990': 10, '1991': 0, '1992': 30},
     'b': {'1990': 15, '1991': 40, '1992': 0}}

我想测试两种方法是否适用于' a'和' b'钥匙的价值' 1990'和' 1991'不是零

for i in d:
    for k in range(2):
        year = 1990
        year = year + k
        if all((d[i][str(year)]) != 0):
            print(d[i])

所以它应该只返回b,因为[' 1991'] = 0

但这是我第一次使用all()函数并得到错误核心:TypeError:' bool'对象不可迭代

错误发生在if all()行

中 非常感谢你!

1 个答案:

答案 0 :(得分:0)

这可以通过列表推导更一般地完成,您可以迭代dict d中的项目。迭代字典中的键和值的简单理解如下所示:

>>> [k for k, v in d.items()]
['a', 'b']

上面的k将包含密钥和v值。理解也有一个if子句。有了这个,你可以过滤掉你不想要的东西。所以我们定义years = ('1990', '1991')。现在我们可以做另一种理解来测试我们的年份值。

要仅迭代' a',我们可以这样做:

>>> [d['a'][y] for y in years] 
[10, 0]
>>> all([d['a'][y] for y in years])
False

将整个事物粘合在一起:

>>> d={'a' :{ '1990': 10, '1991':0, '1992':30},'b':{ '1990':15, '1991':40, '1992':0}}
>>> years = ('1990', '1991')
>>> [k for k, v in d.items() if all([v[y] for y in years])]
['b']

请参阅the python docs for more information on list comprehensions.