Python:拆分列表中的字典

Mar*_*ère -1 python dictionary list

我想将一个简单的字典转换为这样的:d = {0:0, 1:1, 2:2, 3:3}到一个字典列表,其中每个字典的元素数量与此相同(或如此):[{0:0, 2:2}, {1:1, 3:3}]。我尝试过使用简单的索引,就像我使用列表一样,但它给了我一个TypeError: unhashable type: 'slice'. 这是我现在所拥有的:

def dico_chunks(dico, n):
    if len(dico) < n:
        n = len(dico)
    return [dico[i::n] for i in range(n)]
Run Code Online (Sandbox Code Playgroud)

请记住,无论如何我都不需要按顺序排列列表。n我只需要将我的主字典分成子字典列表。

sch*_*ggl 6

基于生成器的方法:

def chunk_dict(d, chunk_size):
    r = {}
    for k, v in d.items():
        if len(r) == chunk_size:
            yield r
            r = {}
        r[k] = v
    if r:
        yield r

d = {1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6}
list(chunk_dict(d, 2))
# [{1: 1, 2: 2}, {3: 3, 4: 4}, {5: 5, 6: 6}]
Run Code Online (Sandbox Code Playgroud)

itertools.islice可以在此答案中找到相同功能(使用)的更短且性能更高的版本。

对于给定数量的尽可能均匀分布的块(例如大小为 4、4、3、3 而不是 4、4、4、2),您可以执行以下操作:

chunks = [{} for _ in range(num_chunks)]
for i, k in enumerate(d):
    chunks[i % num_chunks][k] = d[v]
Run Code Online (Sandbox Code Playgroud)