繁体   English   中英

如何遍历Python中的嵌套字典?

[英]How to iterate through nested dict in Python?

我有一个包含3个词典的2个词典的列表,我需要用3个词典中的键base或任何其他键创建一个列表。 最终结果将是这样的:

>>> 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())创建一个符号list(m.keys()) ,选择每个符号k然后访问[base]键。

谢谢

自己弄清楚逻辑的最好方法是构造一个长形式的嵌套for循环:

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

没有split的解决方案是:

[[pair['base'] for pair in market.values()] for market in markets_details]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM