[英]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.