我有一个字典列表,我想根据特定条件提取特定数据。如果货币显示美元且大于 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'))
关于python 3.4 列表理解 - 在列表中调用临时变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35548737/