我使用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()行
中 非常感谢你!答案 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.