gpt4 book ai didi

python - 扁平化 OrderedDict 值的联合

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:21 28 4
gpt4 key购买 nike

我正在寻找一种 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']

关于python - 扁平化 OrderedDict 值的联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45992322/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com