我以一系列元组的形式处理大量数据.每个元组都有一个指定的格式(a, b, c, d, e).元组列表如下所示:
tupleList = [('a1', 'b1', 'c1', 'd1', 'e1'),
('a2', 'b2', 'c2', 'd2', 'e2'),
...
('a10000', 'b10000', 'c10000', 'd10000', 'e100000')]
Run Code Online (Sandbox Code Playgroud)
我想要的是,将这些元组中的每一个转换为字典,并将字典附加到字典的最终列表中.这一切都可以循环完成吗?字典的最终列表应如下所示:
finalDictList = [{'key1': 'a1', 'key2': 'b1', 'key3': 'c1', 'key4': 'd1', 'key5': 'e1'},
{'key1': 'a2', 'key2': 'b2', 'key3': 'c2', 'key4': 'd2', 'key5': 'e2'},
{'key1': 'a3', 'key2': 'b3', 'key3': 'c3', 'key4': 'd3', 'key5': 'e3'},
...
{'key1': 'a10000', 'key2': 'b10000', 'key3': 'c10000', 'key4': 'd10000', 'key5': 'e10000'}]
Run Code Online (Sandbox Code Playgroud)
元组的格式是固定的.我想比较一个字典的每个键与所有其他键的后缀.这就是为什么将元组转换为字典对我来说是有意义的.如果设计范式本身看起来不对劲,请纠正我.此外,有> 10000元组.声明许多字典都没有完成.
无论如何将字典附加到循环中的列表中?另外,如果可以的话,我们可以通过它的关键值来访问每个字典finalDictList[0]['key1']吗,比如说?
jul*_*ria 10
我们将混合三个重要概念,使这段代码非常小巧漂亮.首先,列表理解,然后是zip方法,最后是dict方法,用于从元组列表中构建字典:
my_list = [('a1', 'b1', 'c1', 'd1', 'e1'), ('a2', 'b2', 'c2', 'd2', 'e2')]
keys = ('key1', 'key2', 'key3', 'key4', 'key5')
final = [dict(zip(keys, elems)) for elems in my_list]
Run Code Online (Sandbox Code Playgroud)
之后,final变量的值为:
>>> final
[{'key3': 'c1', 'key2': 'b1', 'key1': 'a1', 'key5': 'e1', 'key4': 'd1'},
{'key3': 'c2', 'key2': 'b2', 'key1': 'a2', 'key5': 'e2', 'key4': 'd2'}]
Run Code Online (Sandbox Code Playgroud)
此外,您可以使用列表中字典的位置和您要查找的键来获取某个字典的元素,即:
>>> final[0]['key1']
'a1'
Run Code Online (Sandbox Code Playgroud)
使用zip关键名称的预先定义的列表,在您的输入列表中的每个元组结合起来,然后将结果传递dict,使他们成为类型的字典.将整个事物包含在列表理解中,以便在一个批处理中处理它们:
keys = ('key1', 'key2', 'key3', 'key4', 'key5')
finalDictList = [dict(zip(keys, values)) for values in tupleList]
Run Code Online (Sandbox Code Playgroud)