通过条件引用合并python字典值

2024-04-27 00:45:22 发布

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

假设我有两个字典,balprices_eth。我想添加一个新的键bal[eth],如果它与prices_eth中的值匹配,它将包含资产的价格。例如:

bal={
    u'POWR': 5.341, 
    u'GXS': 1.758285, 
    u'NEO': 20.1805
}
price={
    u'POWRETH': 0.00161001, 
    u'GXSETH': 0.00974900, 
    u'NEOETH': 0.09775400
}

然后我想把它们组合起来,这样它们看起来像这样

bal={
    u'POWR' : {
        "balance" : 5.341, 
        "eth price" : 0.0016100
}, 
    u'GXS': {
        "balance" : 1.758285, 
        "eth price" : 0.00974900
}, 
    u'NEO': {
            "balance" : 20.1805, 
            "eth_price" : 0.09775400
        }
    }

Tags: 字典价格资产priceethpricesbalanceneo
2条回答

最简单的解决方案是遍历键的交集,并将相应的余额和价格作为条目添加到新字典中。如果您可以保证如果一个键存在于价格平衡中的任何一个中,它将存在于另一个中,那么交集就没有必要了。由于我无法从您的问题中假设这一点,您可以对键集使用交集操作来生成公共键(setA.intersection(setB)或简单地setA & setB)。你知道吗

keyset = set(bal) & set(price)

另一个问题是,您的键不是通用名称—python命令行中的键具有后缀“ETH”。如果要执行交集检查以仅获取两个字典中都存在的项,则需要使两个字典的键保持一致。最简单的解决方法是复制一个字典,修复不一致的地方。你知道吗

c_price = dict()
for key in price:
    c_price[key.replace("ETH", "")] = price[key]

或者只是

c_price = { key.replace('ETH', ''): price[key] for key in price.keys() }

现在,使用两个具有公共键的字典,您可以创建一个字典,通过遍历键集并在新字典上设置值,将每个键的值合并到单个字典中。你知道吗

keyset = set(bal) & set(price)
for key in keyset:
    combined[key] = {'bal' : bal[key, 'price' : price[key])}

或者只是

combined = { key : {'bal' : bal[key], 'price' : price[key]} for key in keyset }

您只需将它们键中的值更改为字典,然后在两个字典中的键上进行迭代。你知道吗

bal_keys= list(bal.keys())
price_keys= list(price.keys())

for balKey, priceKey in zip(bal_keys, price_keys):
    if bal[balKey] == price[priceKey]:
        bal[balKey]= {"balance": bal[balKey], "eth price": price[priceKey]}

相关问题 更多 >