我有一个字典列表,我想根据某些条件提取某些数据。如果货币显示的是美元且大于0,我只想提取货币(以int / float表示)。
curr = [{'currency': '6000.0000,EUR', 'name': 'Bob'},
{'currency': '0.0000,USD', 'name': 'Sara'},
{'currency': '2500.0000,USD', 'name': 'Kenny'},
{'currency': '0.0000,CND', 'name': 'Debbie'},
{'currency': '2800.0000,USD', 'name': 'Michael'},
{'currency': '1800.0000,CND', 'name': 'Aaron'},
{'currency': '2500.0000,EUR', 'name': 'Peter'}]
结果:
usd_curr = [2500.0000, 2800.0000]
这就是我所做的。
usd_curr = [line for line in data if ',USD' in line['currency']]
usd_curr = [float(elem['currency'].split(',')[0]) for elem in curr if float(elem['currency'].split(',')[0]) > 0]
该列表有效,但是我的问题确实是这样-是否有更好的方法在列表推导中使用变量,因此它看起来像这样:
usd_curr = [var = float(elem['currency'].split(',')[0]) for elem in curr if var > 0]
没有什么好的语法可以使用理解来做到这一点。您可以使用内部生成器生成用于减少重复次数的值,但是复杂度越高,它就会变得真正难以读取。
usd_curr = [
float(val)
for val, val_type in (elem['currency'].split(',') for elem in curr)
if val_type == 'USD' and float(val) > 0
]
我建议改用命名生成器。
def get_currency_by_type(curr, curr_type):
for elem in curr:
val, val_type = elem['currency'].split(',')
if val_type == curr_type and float(val) > 0:
yield float(val)
usd_curr = list(get_currency_by_type(curr, 'USD'))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句