簡體   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