Skip to main content
 首页 » 编程设计

python之扁平化 OrderedDict 值的联合

2025年05月04日21开发

我正在寻找一种 Pythonic 方式来获取 OrderedDict 的 .values 的并集,在 折叠组成值的列表之后。我希望结果是一维列表,根据自定义顺序排序。

我在做什么:

from collections import OrderedDict     
order = list('acebd') 
d = OrderedDict([(1, ['a', 'e']), 
                 (2, ['a', 'b', 'c']) 
                ]) 

和期望的结果:

['a', 'c', 'e', 'b'] # ordered according to `order`, where len(order) 
                     # may be greater than len(result) here 

我目前的实现

def flatten(iterable): 
    """Flatten a nested iterable.  Not my code.""" 
    it = iter(iterable) 
 
    for e in it: 
        if isinstance(e, (list, tuple)): 
            for f in flatten(e): 
                yield f 
        else: 
            yield e 
 
print(list(set(flatten(d.values())))) 
['a', 'e', 'b', 'c'] 

但不确定如何映射到排序,并寻找更优雅或更快的解决方案。

请您参考如下方法:

你不需要展平,它们只是简单的列表,只需将它们 itertools.chain 放在一起即可。
您可以使用集合作为列表推导中的守卫来获得您想要的顺序:

In []: 
import itertools as it 
s = set(it.chain.from_iterable(d.values())) 
[o for o in order if o in s] 
 
Out[]: 
['a', 'c', 'e', 'b']