我有一个这样的列表:
[['ok.txt', 'hello'], [10, 20], ['first_one', 'second_one'], ['done', 'pending']]
我想将此列表转换为字典,如下所示:
{'ok.txt' : ['10', 'first_one', 'done'], 'hello' : ['20', 'second_one', 'pending']}
如何做这样的事情?
我有一个这样的列表:
[['ok.txt', 'hello'], [10, 20], ['first_one', 'second_one'], ['done', 'pending']]
我想将此列表转换为字典,如下所示:
{'ok.txt' : ['10', 'first_one', 'done'], 'hello' : ['20', 'second_one', 'pending']}
如何做这样的事情?
尝试这个:
dict(zip(xs[0], zip(*xs[1:])))
对于作为字典值的列表:
dict(zip(xs[0], map(list, zip(*xs[1:]))))
您可以使用内置的 zip 功能轻松执行此操作,如下所示:
list_of_list = [['ok.txt', 'hello'], [10, 20], ['first_one', 'second_one'], ['done', 'pending']]
dict_from_list = dict(zip(list_of_list[0], zip(*list_of_list[1:])))
在这种情况下,内部 zip(*list_of_list[1:]) 会将列表列表从 list_of_list(第一个元素除外)转换为元组列表。元组是按顺序保留的,并再次与假定的键一起压缩以形成一个元组列表,该列表通过 dict 函数转换为适当的字典。
请注意,这将具有元组作为字典中值的数据类型。根据您的示例,单线将给出:
{'ok.txt': (10, 'first_one', 'done'), 'hello': (20, 'second_one', 'pending')}
为了有一个列表,您必须使用列表函数映射内部 zip。(即)改变
zip(*list_of_list[1:]) ==> map(list, zip(*list_of_list[1:]))
有关 zip 功能的信息,请单击此处
编辑:我刚刚注意到答案与西蒙给出的答案相同。当我在终端中尝试代码时,西蒙给出的速度更快,而我在发布时没有注意到他的回答。
>>> lis = [['ok.txt', 'hello'], [10, 20], ['first_one', 'second_one'], ['done', 'pending']]
>>> keys, values = lis[0],lis[1:]
>>> {key:[val[i] for val in values]
for i,key in enumerate(keys) for val in values}
{'ok.txt': [10, 'first_one', 'done'], 'hello': [20, 'second_one', 'pending']}