python 3.4 列表理解 - 在列表中调用临时变量

标签 python list

我有一个字典列表,我想根据特定条件提取特定数据。如果货币显示美元且大于 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/

相关文章:

python - python中的条件类继承

python - 如何检查第一个列表是否以相同的顺序出现在第二个列表中的某个位置

c# - 在 C# 中将元素添加到列表的子列表

java - 有效地将许多短排序列表合并成一个长排序列表

python - 带有嵌入 if 语句的 For 循环来更新数据帧

Python 大函数多变量(重构)

python - 如何更改标签的字体(和字体大小)

mysql - 更新列表列表表中的特定行

list - Haskell 列表理解仅打印偶数

python - 使用 '?' 作为 Flask 和 SQLite3 的占位符会产生 OperationalError。