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

时间:2018-01-06 23:16:41

标签: python dictionary merge

因此,我要说我有两个词典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
        }
    }

2 个答案:

答案 0 :(得分:0)

最简单的解决方案是迭代密钥的交集,并将相应的余额和价格作为新词典中的条目添加。如果你可以保证如果一个密钥存在于任何一个价格余额中,它将存在于另一个中,那么交集是不必要的。由于我无法从您的问题中假设这一点,您可以使用密钥集上的交集操作来生成公共密钥(setA.intersection(setB)或简单地setA & setB)。

keyset = set(bal) & set(price)

另一个问题是你的密钥不是通用的名字 - python dictonary中的密钥有足够的" 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 }

答案 1 :(得分:0)

你可以将它们键中的值更改为字典并迭代两个字典中的键。

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]}