如何确定集合中Python中具有非空属性的元素数?

如何确定集合中Python中具有非空属性的元素数?,python,Python,我有以下收藏 [ {'propertyA': {}, 'propertyB': 12345, 'id': 1}, {'propertyA': {}, 'propertyB': 12345, 'id': 2}, {'propertyA': {}, 'propertyB': 12345, 'id': 3}, {'propertyA': {'subProperty1': 'x', 'subProperty2': 'y'}, 'propertyB': 6789

我有以下收藏

[
{'propertyA': {},
 'propertyB': 12345,
 'id': 1},
{'propertyA': {},
 'propertyB': 12345,
 'id': 2},
{'propertyA': {},
 'propertyB': 12345,
 'id': 3},
{'propertyA': {'subProperty1': 'x',
               'subProperty2': 'y'},
 'propertyB': 67890,
 'id': 4},
{'propertyA': {'subProperty1': 'x',
               'subProperty2': 'y'},
 'propertyB': 67890,
 'id': 5}
]
正如您所观察到的,前三项具有相同的
'propertyA'
'propertyB'
,但它们都具有唯一的ID。因此可以安全地假设
'propertyA'
'propertyB'
就像一个捆绑包,两者的组合保持一致

我想确定此数组中唯一的项的数量(在这种情况下,唯一的定义是
'propertyA'
'propertyB'
)的唯一组合,字段
'propertyA'
为空(
{}
)。在这种情况下,它是1

为了让我更清楚,让我们添加另一项

{'propertyA': {},
 'propertyB': 13579,
 'id': 6},

唯一项目的数量现在是两个。我理解这有点混乱,请让我进一步澄清。

使用生成器表达式筛选集合,并使用
set
获取唯一元素

print len(set(item['propertyB'] for item in a if item['propertyA']=={}))

你的问题不是归结为在propertyA是空字典的情况下查找给定条目的唯一propertyB数吗?@zehnpaard是的,正是这样。你不需要在列表中的if项['propertyA']={}中为item添加
item['propertyB']吗?len()获取任意序列中的元素数。set()从任何兼容结构生成集合,而不仅仅是列表。在这种情况下,生成器序列就可以了。
>>> len(set(map(lambda x: x["propertyB"] if 'propertyA' == {} else None ,l)))

1