首页 > 解决方案 > 如何将列表映射到 dict 键作为值

问题描述

我有一个迭代器对象,然后当迭代时,它的每个项目属性都对时间和价值感兴趣

[(point.time, point.value) for point in control_points]
[(Fraction(-1, 23), Fraction(0, 1)), (Fraction(24, 23), Fraction(100, 1))]

时间和价值都是Fraction对象

现在我必须构建一个以第一个元组是具有 in_time 字典和第二个元组到 out_time 字典的方式映射的数据结构

({'in_time': "" , 'in_value': ""} , {'out_time': "", 'out_value': ""})

我也尝试过使用类似这样的列表的不同方式:

container = [['in_time', 'in_value'] , ['out_time', 'out_value']]

dict(zip([objects for objects in container, [(point.time, point.value) for point in contol_points]]))
Traceback (most recent call last):
  File "<console>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 1; 2 is required

我希望这样的事情是可能的:https ://stackoverflow.com/a/33737067/9567948

标签: pythonlistdictionarycollections

解决方案


忽略分数并使用整数显示一种方法:

给定

control_points = [point(-1, 0), point(24, 100)]
container = [['in_time', 'in_value'] , ['out_time', 'out_value']]

注意

{ container[0][0]:control_points[0].time, container[0][1] : control_points[0].value }

{'in_time': -1, 'in_value': 0}

所以,这就是第一个项目。如果你枚举container这样的:

[{ c[0]:control_points[i].time, c[1] : control_points[i].value } for i,c in enumerate(container)]

你得到这个:

[{'in_time': -1, 'in_value': 0}, {'out_time': 24, 'out_value': 100}]

这似乎在两点上是最重要的,但显示了如何进行字典比较和枚举。


推荐阅读