Python如何遍历嵌套字典并更改值?

问题描述 投票:0回答:2

我有如下数据

{'exchange1': [{'price': 9656.04, 'side': 'bid', 'size': 0.16, 'timestamp': 1589504786}, 
               {'price': 9653.97, 'side': 'ask', 'size': 0.021, 'timestamp': 1589504786}], 
'exchange2': [{'price': 9755.3, 'side': 'bid', 'size': 27.0, 'timestamp': 1589504799},
              {'price': 9728.0, 'side': 'bid', 'size': 1.0, 'timestamp': 1589504799}]}

我想遍历每个交易所,然后遍历所有价格,然后根据side键进行更改。如果side : bid我想将price乘以一个数字(例如:0.99),而如果side : ask我想将价格乘以另一个数字(例如:1.01)。

我不确定如何在包含边和价格数据的字典列表上进行迭代。

谢谢您的帮助。

python loops dictionary itertools
2个回答
1
投票

您可以在此处使用dict来保存价格乘数,并使用嵌套的for循环遍历所有订单。

exchanges = {
    'exchange1': [{'price': 9656.04, 'side': 'bid', 'size': 0.16, 'timestamp': 1589504786},
                  {'price': 9653.97, 'side': 'ask', 'size': 0.021, 'timestamp': 1589504786}],
    'exchange2': [{'price': 9755.3, 'side': 'bid', 'size': 27.0, 'timestamp': 1589504799},
                  {'price': 9728.0, 'side': 'bid', 'size': 1.0, 'timestamp': 1589504799}]
}

price_multipliers = {
    'bid': 0.99,
    'ask': 1.01
}

for orders in exchanges.values():
    for order in orders:
        order["price"] *= price_multipliers[order["side"]]

0
投票

理解的方式是:

{k: [
    {**order, 'price': (
        order['price'] * 0.99 
        if order['side'] == 'ask' 
        else order['price'] * 1.01
    )}
    for order in exchange
] for k, exchange in exchanges.items()}
© www.soinside.com 2019 - 2024. All rights reserved.