如何将嵌套列表转换为字典?
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_list
。 your_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
例如
就是这样!
我想要一个嵌套列表,例如:
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_list
。 your_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
例如
就是这样!