循环列表并基于索引创建字典

2024-04-29 11:22:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个字典来获得如下输出:

代码:

d = {}
a = [[["man", "eater", "king"], ["king", "kong", "yes"]]]

for i, x in enumerate(a):
    for ii, xx in enumerate(x):
#this part i hope to check both the i and ii combination already inside the dictionary or not
#Example like if i or ii in d: # maybe something relevant
        d[i] = {ii:xx}
print(d)

电流输出:

{0: {1: ['king', 'kong', 'yes']}}

预期产量:

{{0: {0: ['man', 'eater', 'king']}},{0: {1: ['king', 'kong', 'yes']}}}

Tags: orthe代码infor字典thisyes
2条回答

我想你的意思是:

d = {i: {j: s for j, s in enumerate(l)} for i, l in enumerate(a)}

或使用嵌套的for循环:

d = {}
for i, l in enumerate(a):
    t = {}
    for j, s in enumerate(l):
        t[j] = s
    d[i] = t

d变成:

{0: {0: ['man', 'eater', 'king'], 1: ['king', 'kong', 'yes']}}

请注意,您的预期输出是不正确的,因为它是一组dict,这是不可能发生的,因为dict是不可损坏的

使用collections.defaultdict

例如:

from collections import defaultdict

d = defaultdict(dict)
a = [[["man", "eater", "king"], ["king", "kong", "yes"]]]

for i, x in enumerate(a):
    for ii, xx in enumerate(x):
        d[i][ii] = xx
print(d)

或者

d = {}
a = [[["man", "eater", "king"], ["king", "kong", "yes"]]]

for i, x in enumerate(a):
    d[i] = {}
    for ii, xx in enumerate(x):
        d[i][ii] = xx
print(d)

或者

for i, x in enumerate(a):
    for ii, xx in enumerate(x):
        d.setdefault(i, {})[ii] = xx
print(d)

输出:

defaultdict(<type 'dict'>, {0: {0: ['man', 'eater', 'king'], 1: ['king', 'kong', 'yes']}})

相关问题 更多 >