如何找到具有更多填充值的字典?

How to find the dict which has more number of filled values?

我有两个Dict

a = {'A':'',
     'B':'234923',
     'C': 'adkasd',
     'D':'kajskdad'}

b = {'A':'',
     'B':'dfdsf',
     'C': 'adkasd',
     'D':''}

如何 return Dict 在这 2 Dict 中有更多的字段值(非 '' 值)?

我厌倦了这个功能:

def getLargerData(dict1, dict2):
    countA = len([i for i in dict1.values() if i != ''])
    countB = len([i for i in dict2.values() if i != ''])
    if countA > countB:
        return dict1
    else:
        return dict2

输出:

{'A':'',
 'B':'234923',
 'C': 'adkasd',
 'D':'kajskdad'}

有什么方法可以为此优化更多或替代解决方案吗?

试试这个,它有点“优化”

def getLargerData(dict1, dict2):
    '''returns True if dict1 is larger than dict2 otherwise returns false'''
    return len([i for i in dict1.values() if i != '']) > len([i for i in dict2.values() if i != ''])

这是它的工作原理:

def getLargerData(dict1,dict2): 定义函数

return returns 如果:

  • len(的长度
    • [i for i in dict1.values() if i != ''] returns dict1 中的所有值,如果不是 none
  • > returns 如果大于
  • len(的长度
    • [i for i in dict2.values() if i != ''] returns dict2 中的所有值,如果不是 none

您可以简单地检查每个字典中所有值的计数。 感谢@deceze 的评论,以获取 dict 的每个值的 oneliner 总和。

def getLargerData(dict1, dict2):
    countA = sum(1 for i in dict1.values() if i)
    countB = sum(1 for j in dict2.values() if j)
    
    return dict1 if countA > countB else dict2

getLargerData(a,b)

输出:

{'A': '', 'B': '234923', 'C': 'adkasd', 'D': 'kajskdad'}