【问题标题】:How to filter a specific, non-constant float out of a list如何从列表中过滤特定的非常量浮点数
【发布时间】:2020-02-27 04:11:19
【问题描述】:

我是 python 新手,我一直在尝试编写一个程序来跟踪我的 Steam 库存的总价值。我已经能够检索到我所有的皮肤和价格,但问题是将价格输出与 steam_community_market.market 模块输出隔离开来,这是一个包含许多不必要信息的列表。我无法找到如何从列表中仅过滤特定字符串。我要过滤的列表格式的一个示例是:

skins_prices = [
    {'Mann Co. Supply Crate Key': {
        'success': True, 
        'lowest_price': '$2.50', 
        'volume': '6,489', 
        'median_price': '$2.45'},
     'AK-47 | Redline (Field-Tested)': {
        'success': True,
        'lowest_price': '$15.00',
        'volume': '749', 
        'median_price': '$14.78'}
    }
]

我还没有完成将成本加在一起的部分,因为首先我需要隔离每个项目的“最低价格”,我该怎么做才能使用该数字来计算总价值/成本(意味着它需要是一个浮动)?如果您需要更多详细信息或有任何问题,请告诉我。有什么帮助,在此先感谢。

【问题讨论】:

  • 使用嵌套循环。外循环遍历列表元素,内循环遍历字典项。然后你只需加起来item['lowest_price']。您需要先删除 $ 并转换为 float
  • 你能在你的问题中添加预期的输出吗
  • 解决方案所需的输出是与每个项目的“最低价格”相对应的浮动列表。

标签: python python-3.x list list-comprehension


【解决方案1】:

这是评论中指出的嵌套字典的问题。这是一个示例代码来帮助您:

key = 'lowest_price'
lowest_prices = {}
for k, v in skins_prices[0].items():
    for k1, v1 in v.items():
        if k1 == key:
            lowest_prices[k] = float(v1[1:])
print(lowest_prices)

输出(我已删除 $ 并转换为浮点数):

{'Mann Co. Supply Crate Key': 2.5, 'AK-47 | Redline (Field-Tested)': 15.0}

现在您可以使用新字典来操作值。例如获取总和如下:

>> sum(list(lowest_prices.values()))
>> 17.5

HTH。

【讨论】:

    【解决方案2】:

    我认为你需要:

    low_prices = []
    
    # as your list has only 1 component we are using `[0]` and iterating over it
    for _, v in skins_prices[0].items():
        low_prices.append(float(v["lowest_price"][1:]))
    
    print(low_prices)
    

    输出:

    [2.5, 15.0]
    

    解释

    v["lowest_price"][1:] 我们正在使用索引来忽略 str 中的第一个字符 $ 所以现在的值将是 2.515

    在此我们应用floatstr 转换为float 并将其附加到low_prices 的新列表中

    【讨论】:

    • 非常感谢您的解决方案。你能解释一下你做了什么,以便我可以理解并在将来需要时复制它吗?
    • @HenruDorsey 添加了解释
    猜你喜欢
    • 1970-01-01
    • 2014-11-27
    • 2017-07-02
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2023-01-09
    • 2019-05-16
    • 2018-11-30
    相关资源
    最近更新 更多