我有一个这样的清单:
[['ok.txt', 'hello'], [10, 20], ['first_one', 'second_one'], ['done', 'pending']]
我想将此列表转换为字典,如下所示:
{'ok.txt' : ['10', 'first_one', 'done'], 'hello' : ['20', 'second_one', 'pending']}
如何做这样的事情?
答案 0 :(得分:5)
试试这个:
dict(zip(xs[0], zip(*xs[1:])))
对于列表作为dict的值:
dict(zip(xs[0], map(list, zip(*xs[1:]))))
答案 1 :(得分:0)
>>> 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']}
答案 2 :(得分:0)
您可以使用内置的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')}
要获得列表,您必须使用list函数映射内部zip。 (即)改变
zip(*list_of_list[1:]) ==> map(list, zip(*list_of_list[1:]))
有关zip功能的信息,请点击here
编辑:我刚刚注意到答案与Simon给出的答案相同。当我在终端中尝试代码时,西蒙给了它更快的速度,当我发帖时我没有注意到他的答案。