使用forloop将列表转换为2d字典

2024-04-16 11:59:33 发布

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

我无法将二维列表转换为二维字典。在此之前,我对2d词典没有太多的研究,所以请耐心等待。我只是想知道这为什么总是出现一个键错误。在这个简单的例子中,我希望字典看起来像{gender:{name:[food,color,number]}}

    2dList = [['male','josh','chicken','purple','10'],
             ['female','Jenny','steak','blue','11']]
    dict = {}
    for i in range(len(2dList)):
        dict[2dList[i][0]][2dList[i][1]] = [2dList[i][2], 2dList[i][3], 2dList[i][4]]

我一直收到错误消息:keyror:'male'。我知道这是你为一个1d字典添加键的方法,但是对于2d字典我不太确定。我一直认为:

^{pr2}$

Tags: namenumber列表字典food错误genderdict
3条回答

您可以尝试以下操作:)如果您的male或{}中有多个List,它也可以工作

List = [['male','josh','chicken','purple','10'],
        ['female','Jenny','steak','blue','11']]


d = {}

for l in List:
    gender = l[0]
    name = l[1]
    food = l[2]
    color = l[3]
    number = l[4]

    if gender in d: # if it exists just add new name by creating new key for name
        d[gender][name] = [food,color,number]
    else: # create new key for gender (male/female)
        d[gender] = {name:[food,color,number]}

您正试图构建嵌套词典。但是没有显式初始化第二层字典。每次遇到新的密钥时,都需要这样做。顺便说一句,2dlist是python中声明变量的错误方法。这应该对您有用:

dList = [['male','josh','chicken','purple','10'],
         ['female','Jenny','steak','blue','11']]
dict = {}
for i in range(len(dList)):
    if not dList[i][0] in dict.keys():
        dict[dList[i][0]] = {}
    dict[dList[i][0]][dList[i][1]] = [dList[i][2], dList[i][3], dList[i][4]]
print(dict)

要获得或多或少“正常”的结果,请使用以下方法(字典列表,每个dict的格式为{gender: { name: [food, color, number] }}):

l = [['male','josh','chicken','purple','10'], ['female','Jenny','steak','blue','11']]
result = [{i[0]: {i[1]:i[2:]}} for i in l]
print(result)

输出:

^{pr2}$

相关问题 更多 >