Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将字典附加到循环中的列表_Python_Dictionary - Fatal编程技术网

Python 如何将字典附加到循环中的列表

Python 如何将字典附加到循环中的列表,python,dictionary,Python,Dictionary,我拥有大量的数据,以元组列表的形式。每个元组都有一个指定的格式,如(a、b、c、d、e)。元组列表如下所示: tupleList = [('a1', 'b1', 'c1', 'd1', 'e1'), ('a2', 'b2', 'c2', 'd2', 'e2'), ... ('a10000', 'b10000', 'c10000', 'd10000', 'e100000')] 我想要的是,将这些元组中的每一个转换为字典

我拥有大量的数据,以元组列表的形式。每个元组都有一个指定的格式,如
(a、b、c、d、e)
。元组列表如下所示:

tupleList = [('a1', 'b1', 'c1', 'd1', 'e1'),
             ('a2', 'b2', 'c2', 'd2', 'e2'),
             ...
             ('a10000', 'b10000', 'c10000', 'd10000', 'e100000')]
我想要的是,将这些元组中的每一个转换为字典,并将字典附加到最终的字典列表中。所有这些都能在一个循环中完成吗?字典的最终列表应如下所示:

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'}]
元组的格式是固定的。我想把一本字典的后记、每个键的值和其他所有键进行比较。这就是为什么元组到字典的转换对我来说是有意义的。如果设计范例本身似乎是错误的,请纠正我。此外,还有超过10000个元组。声明很多字典都没有完成


在循环中是否仍有将字典附加到列表的方法?另外,如果可能的话,我们可以通过每个字典的键值来访问它吗,比如说,像
finalDictList[0]['key1']

我不太明白,既然已经有了元组列表,为什么还要把所有的东西都转换成字典

>>> tupleList = [('a1', 'b1', 'c1', 'd1', 'e1'),
...              ('a2', 'b2', 'c2', 'd2', 'e2'),
...              ('a10000', 'b10000', 'c10000', 'd10000', 'e100000')]
>>> [x[1] for x in tupleList]
['b1', 'b2', 'b10000']

使用Python的列表理解语法,您可以获得每个元组的所有第n个元素的列表。

使用
zip
将预定义的键名列表与输入列表中的每个元组组合起来,然后将结果传递给
dict
,使它们成为dict。将整个内容包装在一个列表中,以便在一批中处理所有内容:

keys = ('key1', 'key2', 'key3', 'key4', 'key5')
finalDictList = [dict(zip(keys, values)) for values in tupleList]

我们将混合三个重要的概念,使这段代码真正小巧美观。首先是a,然后是方法,最后是用元组列表构建字典的方法:

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]
之后,
final
变量的值为:

>>> final
[{'key3': 'c1', 'key2': 'b1', 'key1': 'a1', 'key5': 'e1', 'key4': 'd1'},
{'key3': 'c2', 'key2': 'b2', 'key1': 'a2', 'key5': 'e2', 'key4': 'd2'}]
此外,您还可以使用字典在列表中的位置和要查找的键来获取特定字典的元素,即:

>>> final[0]['key1']
'a1'

如果字段已修复,则可以执行以下操作:

fields = ['key1', 'key2', 'key3', 'key4', 'key5']

newList = [dict(zip(fields, vals)) for vals in oldList]
另外,如果可能的话,我们可以通过每个字典的键值来访问它吗,比如finalDictList[0]['key1']


当然,这正是您要做的。

如果您说有很多条目,请记住python有:

from itertools import izip

keys = ['key1', 'key2', 'key3', 'key4', 'key5']
finalDictList = [dict(izip(names, x)) for x in tupleList]

命名的元组可以通过键访问,但同时它们是轻量级的,并且不需要比常规元组更多的内存。

当然,为了避免在每次迭代中建立临时列表。这似乎是在用一个小小的内存分配换取生成器的开销。我知道这一点,但是元组中的条目是相互关联的,也就是说,(a,b,c,d,e)是只有在一起才有意义的值。我知道进行比较很好,但我必须处理完整的元组,以防在比较过程中发生/不发生匹配。我能使这项工作顺利进行,但需要一个周而复始的过程。谢谢!:)@sneha:访问元组元素几乎与访问字典元素的语法完全相同:
x[2]
vs
x[“key2”]
。如果需要,可以定义常量,如
KEY2=2
,这样就可以执行
x[KEY2]
。转换成一个字典列表会占用更多的内存,但没有什么好处。嗯……我想你说得很有道理。让我重新考虑一下我的设计@斯内哈:很高兴我帮了你,如果这篇文章解决了你的问题,你可以选择它作为接受(左边绿色的检查)确认!我很惭愧我不记得了。好球!
from itertools import izip

keys = ['key1', 'key2', 'key3', 'key4', 'key5']
finalDictList = [dict(izip(names, x)) for x in tupleList]
>>> tupleList = [('a1', 'b1', 'c1', 'd1', 'e1'),
...              ('a2', 'b2', 'c2', 'd2', 'e2'),
...              ('a10000', 'b10000', 'c10000', 'd10000', 'e100000')]
>>>
>>> from collections import namedtuple
>>> fv = namedtuple('fivevals', ('key1', 'key2', 'key3', 'key4', 'key5'))
>>> tuplelist = [fv(*item) for item in tupleList]
>>> 
>>> tuplelist[0].key1
'a1'
>>>