Python如何迭代嵌套字典并更改值?

2024-04-24 14:37:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下数据

{'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乘以一个数字(ex:0.99),如果side : ask我想用另一个数字(ex:1.01)乘以价格

我不知道如何迭代包含边值和价格数据的字典列表

谢谢你的帮助


Tags: 数据列表size字典价格数字priceside
3条回答

您可以在这里使用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"]]

作为一种理解,这样做的方法是:

{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()}

我对python非常陌生,因此如果我做错了,请原谅我:

def iterFunc(dic,bidf=0.99,askf=1.01):
    for exchange in dic:
        for part in dic[exchange]:
            ty = part['side']
            if ty == "bid":
                part['price'] *= bidf
            elif ty == "ask":
                part['price'] *= askf

我做了一个函数,其中“dic”是带有嵌套字典的字典

相关问题 更多 >