Skip to main content
 首页 » 编程设计

Python按值查询dict的属性

2025年05月04日23itcoder

我正在尝试获取 poi == true 中的属性计数。我提供了一个 C# 示例供引用,后面是我的 python 代码。

在 Python 中执行此操作的正确方法是什么?

C#:

enron_data.where(x => x.poi == true).count() 

在 Python 中:

i = 0 
for key,value in enron_data.items(): 
    if value["poi"]: 
        i = i + 1 
print i 

安然数据样本:

{'METTS MARK': {'salary': 365788, 'to_messages': 807, 'deferral_payments': 'NaN', 'total_payments': 1061827, 'exercised_stock_options': 'NaN', 'bonus': 600000, 'restricted_stock': 585062, 'shared_receipt_with_poi': 702, 'restricted_stock_deferred': 'NaN', 'total_stock_value': 585062, 'expenses': 94299, 'loan_advances': 'NaN', 'from_messages': 29, 'other': 1740, 'from_this_person_to_poi': 1, 'poi': False, 'director_fees': 'NaN', 'deferred_income': 'NaN', 'long_term_incentive': 'NaN', 'email_address': 'mark.metts@enron.com', 'from_poi_to_this_person': 38}} 

请您参考如下方法:

假设 poi 我可能会做这样的事情总是 True或 False .

sum(int(v['poi']) for v in enron_data.values()) 

enron_data.values()给你一个迭代器,它将返回字典的值。我们对 key 不感兴趣。对于每一个,我们得到 'poi' 的值 key 。就是这样

[v['poi'] for v in enron_data.values()] 

会给你。假设v['poi']总是 True或 False ,我使用 int() 将其转换为整数. int(True)是1和 int(False)是0 .所以,如果我运行它,我会得到一个 1 的列表。 s 和 0秒。然后我sum整个列表以获取 1 的计数s(即 True s)使用 sum内置的。我放下 [和 ]因为我只是要遍历列表而不是索引它或任何东西。

这是我想到的另一种选择。

sum(1 for v in enron_data.values() if v['poi'] is True)