Python 如何从包含重复值的列表创建字典
我是python新手,在尝试将下面的列表转换为字典的过程中,我已经挣扎了一段时间Python 如何从包含重复值的列表创建字典,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我是python新手,在尝试将下面的列表转换为字典的过程中,我已经挣扎了一段时间 lst = ['AB_MK1230', 'MK12303', 86.17, 'AB_MK1230', 'MK12302', 89.99, 'AB_MK1230', 'MK12301', 93.82, 'AB_MK1230', 'MK12301', 94.81, 'AB_MK1230', 'MK12303', 87.5, 'AB_MK1230', 'MK12302', 94.67, 'AB_MK1230', 'M
lst = ['AB_MK1230', 'MK12303', 86.17, 'AB_MK1230', 'MK12302', 89.99,
'AB_MK1230', 'MK12301', 93.82, 'AB_MK1230', 'MK12301', 94.81, 'AB_MK1230',
'MK12303', 87.5, 'AB_MK1230', 'MK12302', 94.67, 'AB_MK1230', 'MK12302', 90.32,
'AB_MK1230', 'MK12303', 89.26, 'AB_MK1230', 'MK12301', 91.75,'AB_MK1230',
'MK12302', 88.54, 'AB_MK1230', 'MK12303', 92.5,'AB_MK1230', 'MK12301', 93.49,
'AB_MK1230', 'MK12301', 86.47,'AB_MK1230', 'MK12302', 84.79,'AB_MK1230',
'MK12303', 86.57,'AB_MK1230', 'MK12301', 79.24,'AB_MK1230', 'MK12302', 80.34,
'AB_MK1230', 'MK12303', 76.88]
AB_MK1230是父扇区,MK12303、MK12301和MK12302是子扇区。我的输出是拥有一个字典,其中包含每个子扇区和父扇区的键以及作为该键值的浮点值,如下所示
dict = {MK12301: AB_MK1230, 93.82, 94.81, 91.75, 93.49, 86.47, 79.24
MK12302: AB_MK1230, 89.99, 94.67, 90.32, 88.54, 84.79, 80.34
MK12303: AB_MK1230, 86.17, 87.50, 89.26, 92.50, 86.57, 76.88 }
我已经从中阅读了一些文档,但仍然无法找到解决方案
我怎样才能做到这一点呢?我们反复浏览列表,按
(父项、子项、值)
顺序一次解包三个项目。使用(父、子)
作为字典中的键,然后将值添加到集合中
import itertools
import collections
lst = ['AB_MK1230', 'MK12303', 86.17, 'AB_MK1230', 'MK12302', 89.99,
'AB_MK1230', 'MK12301', 93.82, 'AB_MK1230', 'MK12301', 94.81, 'AB_MK1230',
'MK12303', 87.5, 'AB_MK1230', 'MK12302', 94.67, 'AB_MK1230', 'MK12302', 90.32,
'AB_MK1230', 'MK12303', 89.26, 'AB_MK1230', 'MK12301', 91.75,'AB_MK1230',
'MK12302', 88.54, 'AB_MK1230', 'MK12303', 92.5,'AB_MK1230', 'MK12301', 93.49,
'AB_MK1230', 'MK12301', 86.47,'AB_MK1230', 'MK12302', 84.79,'AB_MK1230',
'MK12303', 86.57,'AB_MK1230', 'MK12301', 79.24,'AB_MK1230', 'MK12302', 80.34,
'AB_MK1230', 'MK12303', 76.88]
d = collections.defaultdict(set)
for parent, child, value in itertools.zip_longest(*[iter(lst)]*3, fillvalue=None):
d[(parent, child)].add(value)
d现在是一本类似字典的书
defaultdict(set,
{('AB_MK1230', 'MK12301'): {79.24,
86.47,
91.75,
93.49,
93.82,
94.81},
('AB_MK1230', 'MK12302'): {80.34,
84.79,
88.54,
89.99,
90.32,
94.67},
('AB_MK1230', 'MK12303'): {76.88,
86.17,
86.57,
87.5,
89.26,
92.5}})
还不完全清楚最终的数据结构应该是什么样子。如果您只希望parent
作为顶级键,则可以使用嵌套的defaultdict
。我们迭代列表,按(父项、子项、值)
顺序一次解包三项。使用(父、子)
作为字典中的键,然后将值添加到集合中
import itertools
import collections
lst = ['AB_MK1230', 'MK12303', 86.17, 'AB_MK1230', 'MK12302', 89.99,
'AB_MK1230', 'MK12301', 93.82, 'AB_MK1230', 'MK12301', 94.81, 'AB_MK1230',
'MK12303', 87.5, 'AB_MK1230', 'MK12302', 94.67, 'AB_MK1230', 'MK12302', 90.32,
'AB_MK1230', 'MK12303', 89.26, 'AB_MK1230', 'MK12301', 91.75,'AB_MK1230',
'MK12302', 88.54, 'AB_MK1230', 'MK12303', 92.5,'AB_MK1230', 'MK12301', 93.49,
'AB_MK1230', 'MK12301', 86.47,'AB_MK1230', 'MK12302', 84.79,'AB_MK1230',
'MK12303', 86.57,'AB_MK1230', 'MK12301', 79.24,'AB_MK1230', 'MK12302', 80.34,
'AB_MK1230', 'MK12303', 76.88]
d = collections.defaultdict(set)
for parent, child, value in itertools.zip_longest(*[iter(lst)]*3, fillvalue=None):
d[(parent, child)].add(value)
d现在是一本类似字典的书
defaultdict(set,
{('AB_MK1230', 'MK12301'): {79.24,
86.47,
91.75,
93.49,
93.82,
94.81},
('AB_MK1230', 'MK12302'): {80.34,
84.79,
88.54,
89.99,
90.32,
94.67},
('AB_MK1230', 'MK12303'): {76.88,
86.17,
86.57,
87.5,
89.26,
92.5}})
还不完全清楚最终的数据结构应该是什么样子。如果您只希望parent
作为顶级键,则可以使用嵌套的defaultdict
…0)您的目标dict
不是有效的Python数据结构1)每次迭代,从列表中读取3项并根据需要进行处理,但您提到的相同原则是否适用于父项和子项记录不同的100K记录?我没有使用我尝试过的代码,因为它不能简单地让我找到最终解决方案的任何线索。0)您的目标dict
不是有效的Python数据结构1)每次迭代,从列表中读取3项并根据需要进行处理,但您提到的相同原则是否适用于父项和子项记录不同的100K记录?我没有使用我尝试过的代码,因为它并没有简单地让我找到最终解决方案的任何线索。非常感谢!!!这就像一个魅力,这是我试图实现的解决方案。关于这个数据结构,我有一个问题:它能按值出现的顺序获取值吗?也就是说,{('AB_MK1230','MK12301'):93.82,94.81,91.75,93.49,86.47,79.24},(…,…):{…}而不是d=collections.defaultdict(set)
used=collections.defaultdict(list)
而不是d[(父,子)]。添加(值)
used[(父,子)]。追加(值)
非常感谢!!!这就像一个魅力,这是我试图实现的解决方案。关于这个数据结构,我有一个问题:它能按值出现的顺序获取值吗?也就是说,{('AB_MK1230','MK12301'):93.82,94.81,91.75,93.49,86.47,79.24},(…,…):{…}而不是d=collections.defaultdict(set)
used=collections.defaultdict(list)
而不是d[(父,子)]。添加(值)
used[(父,子)]。追加(值)