我正在尝试在poi == true的dict中获取属性的数量。我已经包含了一个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
enron_data示例:
{'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}}
答案 0 :(得分:4)
假设poi
总是True
或False
,我可能会这样做。
sum(int(v['poi']) for v in enron_data.values())
enron_data.values()
为您提供了一个返回字典值的迭代器。我们对钥匙不感兴趣。对于每一个,我们得到'poi'
密钥的值。那就是
[v['poi'] for v in enron_data.values()]
会给你。假设v['poi']
总是True
或False
,我会使用int()
将其转换为整数。 int(True)
为1
,int(False)
为0
。所以,如果我运行这个,我会得到一个1
和0
的列表。然后我sum
整个列表,使用1
内置来获取True
s(即sum
s)的计数。我放弃了[
和]
,因为我只是在列表上进行迭代而不是索引它或任何东西。
这是我想到的另一种选择。
sum(1 for v in enron_data.values() if v['poi'] is True)
答案 1 :(得分:2)
假设您有一个字典,其中每个值确实都有poi
键(您的问题暗示):
enron_data = {'foo': {'poi': True}, 'bar': {'poi': False}}
然后,这将总结True
条目的数量:
sum(1 if e['poi'] else 0 for e in enron_data.values())
答案 2 :(得分:0)
您可以使用iter_items()
函数,如下所示:
i = 0
for key,value in enron_data.iter_items():
if value["poi"]:
i = i + 1
print i
OR
i = 0
for key,value in enron_data.iter_items():
i += int(value["poi"])
print i
答案 3 :(得分:-1)
这是不对的,因为从来没有值[“poi”]有一个非假的值,我会增加1,所以你应该这样做:
i = 0
for key,value in enron_data.iter_items():
if value["poi"] == True:
i = i + 1
print i