将索引处的元素组合在字典内的列表中

Grouping elements at an index together in a list inside a dictionary

我有一个很大的 python 字典,类型如下:

bbox = {'0': [a, b, c, l, m],
       '1': [d, e],
       '2': [f, g],
       '3': [h],
       '4': [],
       '5': [i, j, k]}

我想将每个列表中同一索引处的元素组合在一起。同时忽略空位置。 输出是这样的:

output= [[a, d, f, h, i], 
         [b, e, g, j],
         [c, k],
         [l],
         [m]
        ]

字典很大(300 个元素),每个值列表中的元素数量未知。 有我可以使用的功能吗?

谢谢,

使用 defaultdict 并跳跃

bbox = {'0': ['a', 'b', 'c', 'l', 'm'], '1': ['d', 'e'], '2': ['f', 'g'],
        '3': ['h'], '4': [], '5': ['i', 'j', 'k']}

# from collections import defaultdict
result = defaultdict(list)
for values in bbox.values():
    for i, v in enumerate(values):
        result[i].append(v)

final = list(result.values())
print(final)
# [['a', 'd', 'f', 'h', 'i'], ['b', 'e', 'g', 'j'], ['c', 'k'], ['l'], ['m']]

尝试:

from itertools import zip_longest

bbox = {
    "0": ["a", "b", "c", "l", "m"],
    "1": ["d", "e"],
    "2": ["f", "g"],
    "3": ["h"],
    "4": [],
    "5": ["i", "j", "k"],
}

dummy = object()
out = [
    [v for v in t if v is not dummy]
    for t in zip_longest(*bbox.values(), fillvalue=dummy)
]
print(out)

打印:

[["a", "d", "f", "h", "i"], 
 ["b", "e", "g", "j"], 
 ["c", "k"], 
 ["l"], 
 ["m"]]