我有2个词典的列表,其中包含3个词典,我需要创建一个列表,其中包含键base
或3个词典中的任何其他键。最终结果将是这样的:
>>> bases[0]
['BCH', 'BCH', 'BCC']
>>> bases[1]
['ZEC', 'ZRX', 'ZAC']
这就是我的列表的样子:
>>> markets_details
{
'BCH/BTC': {
'active': True,
'altname': 'BCHXBT',
'base': 'BCH',
'darkpool': False
},
'BCH/EUR': {
'active': True,
'altname': 'BCHEUR',
'base': 'BCH',
'darkpool': False
},
'BCC/EUR': {
'active': True,
'altname': 'BCCEUR',
'base': 'BCC',
'darkpool': False
}
},{
'ZEC/BTC': {
'active': True,
'altname': 'ZECXBT',
'base': 'ZEC',
'darkpool': False
},
'ZRX/EUR': {
'active': True,
'altname': 'ZRXEUR',
'base': 'ZRX',
'darkpool': False
},
'ZAC/EUR': {
'active': True,
'altname': 'ZACEUR',
'base': 'ZAC',
'darkpool': False
}
}
我可以用以下内容创建符号列表:
>>> symbols = [list(m.keys()) for m in markets_details]
但我无法使用密钥base
创建列表。对我来说这应该有效,我做错了什么?
>>> bases = [m[k for k in list(m.keys())]['base'] for m in markets_details]
对于每次交换m
,我使用list(m.keys())
创建符号列表,选择每个符号k
,然后访问[base]
键。
谢谢
答案 0 :(得分:2)
为自己计算逻辑的最佳方法是构造一个长形式的嵌套res = []
for d1 in markets_details:
for _, d2 in d1.items():
for k, v in d2.items():
if k == 'base':
res.append(v)
print(res)
['BCH', 'BCH', 'BCC', 'ZEC', 'ZRX', 'ZAC']
循环:
res = [sub_dict['base'] for d in markets_details for sub_dict in d.values()]
完成此操作后,您可以编写等效列表理解的逻辑:
res = [[sub_dict['base'] for sub_dict in d.values()] for d in markets_details]
print(res)
[['BCH', 'BCH', 'BCC'], ['ZEC', 'ZRX', 'ZAC']]
如果您需要确定哪些字典结果来源,您可以重新构建列表推导以包含嵌套列表:
{{1}}
答案 1 :(得分:2)
没有split
的解决方案是:
[[pair['base'] for pair in market.values()] for market in markets_details]