因此,我要说我有两个词典bal
和prices_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
}
}
答案 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]}