Python 使用for循环将列表转换为二维字典
我无法将2d列表转换为2d字典。在此之前,我并没有在2d字典方面做过很多工作,所以请耐心听我说。我只是想知道为什么这会不断出现一个键错误。在这个快速的例子中,我希望字典看起来像{gender:{name:[食物、颜色、数字]}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
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的变量。顺便说一句,如果您的问题得到了回答,如果您接受最有用的答案,那就太好了:)