如何将嵌套列表转换为字典?

How to convert a nested list into a dictionary?

我想要一个嵌套列表,例如:

list = [[Name, Height, Weight],[Dan, 175, 75],[Mark, 165, 64], [Sam, 183, 83]]

并将其转换成字典,例如:

dict = {Name: [Dan,Mark, Sam], Height: [175, 165, 183], Weight: [75, 64, 83]}

不幸的是,我当前的代码并没有真正提供我正在寻找的字典格式。

i = 1
z = 0
for items in list[0]:
    dict[items] = [list[i][z]]
    i += 1
z += 1

有人可以帮助我找出我哪里出错了吗?

先把键和其他键分开,然后用zip:

构造字典
keys, *rest = list_of_lists

out = dict(zip(keys, zip(*rest)))

其中 list_of_lists 是您所谓的 list(但请避免使用它,因为它会遮蔽内置的 list)。第一个 * 从第二个列表开始吞噬所有列表。 zip 中的第二个 * 转置列表以重新排序它们

得到

>>> out

{"Name": ("Dan", "Mark", "Sam"),
 "Height": (175, 165, 183),
 "Weight": (75, 64, 83)}

这会在值中给出元组,但要获取列表,您可以 map:

out = dict(zip(keys, map(list, zip(*rest))))

@Mustafa 的回答是最简洁的,但如果您是初学者,您可能会发现将其分解为多个步骤会更容易。

data =[
    ['Name', 'Height', 'Weight'], 
    ['Dan', 175, 75], ['Mark', 165, 64], ['Sam', 183, 83]
]
keys = data[0]
values = [list(items) for items in zip(*data[1:])]
results = dict(zip(keys, values))

欢迎使用 Whosebug :)

我们很少使用 i++ i+=1 进行循环计数或进入 python 如果我们可以轻松使用 for i in ... 即使我们不知道有多少列表在它.

你的原始数据是list of list。第一个列表是字典的键,另一个列表是每条记录。

当您的数据(列表中的列表)长度相等时,我们经常使用 zip(*your_list)zip 函数将帮助您重新排列 your_listyour_list前面的*表示把your_list中的每条记录一个一个地放到zip函数的参数中
然后把它放在一个for循环中,比如for rec in zip(list):.

所以,您可以像这样编写代码:

your_dict = {}
for rec in zip(yout_list):
    k = rec[0] #dict key
    v = list(rec[1:]) #dict value, convert to list if needed
    your_dict[k] = v # set key and value

例如

就是这样!