Python 使用for循环将列表转换为二维字典

Python 使用for循环将列表转换为二维字典,python,python-3.x,list,dictionary,Python,Python 3.x,List,Dictionary,我无法将2d列表转换为2d字典。在此之前,我并没有在2d字典方面做过很多工作,所以请耐心听我说。我只是想知道为什么这会不断出现一个键错误。在这个快速的例子中,我希望字典看起来像{gender:{name:[食物、颜色、数字]} 2dList = [['male','josh','chicken','purple','10'], ['female','Jenny','steak','blue','11']] dict = {} for i in r

我无法将2d列表转换为2d字典。在此之前,我并没有在2d字典方面做过很多工作,所以请耐心听我说。我只是想知道为什么这会不断出现一个键错误。在这个快速的例子中,我希望字典看起来像{gender:{name:[食物、颜色、数字]}

    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]]
我一直收到错误信息:KeyError:'male'。我知道这是如何为1d字典添加键的,但我不确定是否使用2d字典。我一直认为:

    dictionary_name[key1][key2] = value

您将获得一个
KeyError
,因为您试图以
male
作为键访问字典中不存在的条目

您可以使用
defaultdict
而不是
dict

from collections import defaultdict

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

dict = defaultdict(list)
for i in range(len(2dList)):
    dict[2dList[i][0]][2dList[i][1]] = [2dList[i][2], 2dList[i][3], 2dList[i][4]]

您将获得一个
KeyError
,因为您试图以
male
作为键访问字典中不存在的条目

您可以使用
defaultdict
而不是
dict

from collections import defaultdict

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

dict = defaultdict(list)
for i in range(len(2dList)):
    dict[2dList[i][0]][2dList[i][1]] = [2dList[i][2], 2dList[i][3], 2dList[i][4]]
试试这个

twodList = [['male','josh','chicken','purple','10'],
             ['female','Jenny','steak','blue','11']]
dic = {twodList[i][0]: {twodList[i][1]: twodList[i][2:]} for i in range(len(twodList))}
正如评论中提到的,变量不能以数字开头。

试试这个

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

正如评论中提到的,变量不能以数字开头。

您正在尝试构建嵌套字典。但是没有显式初始化第二层字典。每次遇到新密钥时,都需要执行此操作。顺便说一句,
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)

您正在尝试构建嵌套字典。但是没有显式初始化第二层字典。每次遇到新密钥时,都需要执行此操作。顺便说一句,
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)
要获得或多或少“正常”的结果,请使用以下(字典列表,每个字典的格式为
{gender:{name:[食物、颜色、数字]}
):

输出:

[{'male': {'josh': ['chicken', 'purple', '10']}}, {'female': {'Jenny': ['steak', 'blue', '11']}}]
要获得或多或少“正常”的结果,请使用以下(字典列表,每个字典的格式为
{gender:{name:[食物、颜色、数字]}
):

输出:

[{'male': {'josh': ['chicken', 'purple', '10']}}, {'female': {'Jenny': ['steak', 'blue', '11']}}]
您可以尝试以下方法:)如果您的
列表中有多个
男性
女性
,该方法也会起作用

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]}
您可以尝试以下方法:)如果您的
列表中有多个
男性
女性
,该方法也会起作用

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]}
上面一个给出以下输出: {“男”:{“乔希”:[“鸡”,“紫”,“10”],“约翰逊”:[“鸡”,“紫”,“10”]},“女”:{“詹尼弗”:[“牛排”,“蓝”,“11”],“珍妮”:[“牛排”,“蓝”,“11”}

上面一个给出以下输出:
{“男”:{“乔希”:[“鸡”,“紫”,“10”],“约翰逊”:[“鸡”,“紫”,“10”]},“女”:{“詹尼弗”:[“牛排”,“蓝”,“11”],“詹妮”:[“牛排”,“蓝”,“11”]}

你能分享一个预期结果的样本吗?最好是三个而不是两个样本,因为这将更好地说明你的挑战。提示:您不能有重复的键。嗯,无论如何,您也不能有名为2dList的变量。顺便说一下,如果您的问题得到回答,如果您接受最有用的答案,那就太好了:)您可以分享一个预期结果的示例吗?最好是三个而不是两个,因为这将更好地说明您的挑战。提示:您不能有重复的键。无论如何,您也不能有名为2dList的变量。顺便说一句,如果您的问题得到了回答,如果您接受最有用的答案,那就太好了:)