【问题标题】:Python program to count the values associated with key in a dictionary用于计算与字典中键关联的值的 Python 程序
【发布时间】:2017-09-06 13:49:41
【问题描述】:
def wut(data):
    s = 0
    for dic in data:
        for i,value in dic.items():
            if value == "True":
                s += 1
    return s

data = [{'id': 1, 'success': True, 'name': 'Lary'},
        {'id': 2, 'success': False, 'name': 'Rabi'}, 
        {'id': 3, 'success': True, 'name': 'Alex'}]
wutewa = data
print wut(wutewa)

您好,上面的代码在输入 python 导师时不会继续检查 value=="True" ,我不确定我哪里出错了。我知道我可以使用 sum 函数,但我有这样的东西,如果我尝试使用尽可能多的数据结构,我将能够开发一种编码思维方式。

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    应该是value == True 而不是value == "True"

    或者,就像Jean-François Fabre points out,简单地说:

    if value:
         s += 1
    

    【讨论】:

    • 我正要评论,但不,你不能在这里这样做,因为数字和非空字符串仍然评估为 True编辑:要添加上下文,缺少的注释是“或者只是使用if value
    • 我刚刚删除了我的评论。在那种情况下不应该是value is True吗? (单例,更 Pythonic,是的:stackoverflow.com/questions/4591125/…
    • @Jean-FrançoisFabre 有趣的问题。显然它有一个答案here
    • @Jean-FrançoisFabre 我不确定,我知道is 被认为是None 检查最常用的方法,但对于布尔值,您可能会错过不同的身份对象,例如numpy.True_scipy.True_
    • 我不确定 OP 想要1==True
    【解决方案2】:

    您正在比较字符串"True" 而不是布尔值True,您还可以使用内置sum() 的表达式以更pythonic 的方式执行您想要的操作,如下所示:

    def wut(data):
        return sum(1 for dic in data for v in dic.values() if v is True)
    

    【讨论】:

      【解决方案3】:

      找出有多少项目是“真实”值的更简单方法是使用列表推导:

      data = [{'id': 1, 'success': True, 'name': 'Lary'},
          {'id': 2, 'success': False, 'name': 'Rabi'}, 
          {'id': 3, 'success': True, 'name': 'Alex'}]
      
      def wut(d):
         return sum(sum(bool(b) for b in i.values()) for i in d)
      
      print(wut(data))
      

      输出:

      8
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多