繁体   English   中英

列表+词典理解键过滤

[英]List + Dictionary comprehension key filter

使用以下示例架构:

test_dict = {
    '2015': {
        'bar1': [1, 2, 3, 4],
        'bar2': [2, 2, 2, 2],
        'bar3': [4, 3, 2, 1]
    },
    '2016': {
        'bar1': [1, 2, 3, 4],
        'bar2': [5, 5, 5, 5],
        'bar3': [4, 3, 2, 1]
    },
    '2017': {
        'bar1': [1, 2, 3, 4],
        'bar2': [4, 4, 4, 4],
        'bar3': [4, 3, 2, 1]
    }
}

我需要收集第二个 dict 键指定的所有列表。 所以我目前有代码:

await asyncio.gather(*[get_matches(browser, ser) for ser in test_dict['2015']['bar2']])

但我想收集属于每个bar2键的所有列表,这意味着我想理解为gather() :`

test_dict['2015']['bar2']
test_dict['2016']['bar2']
test_dict['2017']['bar2']

通过指定bar2以便gather()将收到:

[2, 2, 2, 2], [5, 5, 5, 5], [4, 4, 4, 4]

我怎样才能?

我尝试这样做,但没有奏效:

{k2:v2 for k2,v2 in {k:v for k,v in test.items()}.items() if k2 == 'bar2' }

更不用说收集最终会想要一个字典。

如果你需要

get_matches(browser, [2, 2, 2, 2]), get_matches(browser, [5, 5, 5, 5]), ...

然后

[ get_matches(browser, v['bar2']) for k, v in test_dict.items() ]

如果你需要

get_matches(browser, 2), get_matches(browser, 2), ...

然后

[ get_matches(browser, ser) for k, v in test_dict.items() for ser in v['bar2'] ]

如果您只需要列出

[[2, 2, 2, 2], [5, 5, 5, 5], [4, 4, 4, 4]]

然后

[ v['bar2'] for k, v in test_dict.items() ]

甚至

[ v['bar2'] for v in test_dict.values() ]

最少的工作代码

test_dict = {
    '2015': {
        'bar1': [1, 2, 3, 4],
        'bar2': [2, 2, 2, 2],
        'bar3': [4, 3, 2, 1]
    },
    '2016': {
        'bar1': [1, 2, 3, 4],
        'bar2': [5, 5, 5, 5],
        'bar3': [4, 3, 2, 1]
    },
    '2017': {
        'bar1': [1, 2, 3, 4],
        'bar2': [4, 4, 4, 4],
        'bar3': [4, 3, 2, 1]
    }
}


print([('browser', v['bar2']) for k, v in test_dict.items()])
print('---')
print([('browser', ser) for k, v in test_dict.items() for ser in v['bar2']])
print('---')
print([ v['bar2'] for k, v in test_dict.items() ])
print([ v['bar2'] for v in test_dict.values() ])

结果:

[('browser', [2, 2, 2, 2]), ('browser', [5, 5, 5, 5]), ('browser', [4, 4, 4, 4])]
---
[('browser', 2), ('browser', 2), ('browser', 2), ('browser', 2), ('browser', 5), ('browser', 5), ('browser', 5), ('browser', 5), ('browser', 4), ('browser', 4), ('browser', 4), ('browser', 4)]
---
[[2, 2, 2, 2], [5, 5, 5, 5], [4, 4, 4, 4]]
[[2, 2, 2, 2], [5, 5, 5, 5], [4, 4, 4, 4]]

暂无
暂无

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

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