dai*_*yue 2 python dictionary python-3.x
我有一本看起来像的字典
a = {32: [2230], 37265: [2218], 51: [2223], 164: [2227], 3944: [2224]}
Run Code Online (Sandbox Code Playgroud)
但是,值a
可能包含多个元素,例如
a = {32: [2200, 2230], 37265: [2201, 2218], 51: [2223], 164: [2227], 3944: [2224]}
Run Code Online (Sandbox Code Playgroud)
我有一个列表,将键存储a
在组中,
b = [[32, 51, 164], [3944, 37265]]
Run Code Online (Sandbox Code Playgroud)
现在我想获取另一个列表中每个组中键的值,
clusters = []
for key_group in b:
group = []
for key in key_group:
group.extend(a[key])
if len(group) > 1:
clusters.append(group)
Run Code Online (Sandbox Code Playgroud)
所以最终的清单看起来像,
clusters = [[2230, 2223, 2227], [2224, 2218]]
Run Code Online (Sandbox Code Playgroud)
如果a
在值列表中包含多个元素,clusters
看起来像,
clusters = [[2200, 2230, 2223, 2227], [2224, 2201, 2218]]
Run Code Online (Sandbox Code Playgroud)
我想知道最好的方法是什么.
同样,如果b
包含只有一个值/键的列表,并且该键映射到单个元素列表a
,则该列表将被忽略,
a = {32: [2200, 2230], 37265: [2201, 2218], 51: [2223], 164: [2227], 3944: [2224]}
b = [[32, 51, 164], [3944], [37265]]
Run Code Online (Sandbox Code Playgroud)
而3944
映射到[2224]
,将被忽略,但37265
映射到[2201, 2218]
,将保留,因为len([2201, 2218]) > 1
.clusters
在这种情况下将如下所示,
clusters = [[2200, 2230, 2223, 2227], [2201, 2218]]
Run Code Online (Sandbox Code Playgroud)
假设您的值a
始终只是一个包含单个元素的列表,那么它是一个简单的嵌套列表解析:
[[a[k][0] for k in sublist] for sublist in b]
# [[2230, 2223, 2227], [2224, 2218]]
Run Code Online (Sandbox Code Playgroud)
由于您现在已经阐明了a
可以包含多个元素的列表的值,您可以使用它itertools.chain.from_iterable
来展平返回的列表并提供所需的输出:
from itertools import chain
[list(chain.from_iterable(a[k] for k in sublist)) for sublist in b]
# [[2200, 2230, 2223, 2227], [2224, 2201, 2218]]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
76 次 |
最近记录: |