如何在python中将值列表转换为字典?

时间:2016-01-07 16:39:50

标签: python list dictionary

我有一个(未排序的)字典,其中键从0.0开始并继续使用0.1,0.2,0.3等等。所有值都是数字。 我还有一个名为'a'的sys.argv输入,它是一个浮点数。 我需要一个新词典,键应该是:

a
a+0.1
a+0.2
a+0.3

...直到原始字典中的所有值都被分配了一个键。值应保持不变。 所以最后的字典应该是:

{a:first item of sorted dict, a+0.1:second item of sorted dict,...}

所以基本上,键应该添加到float'a'的大小。

我尝试将未排序的字典转换为这样的排序列表:

list=[]
for i in sorted(dict.keys()):
list.append(dict[i])

现在我有一个我需要分配给新密钥的原始字典值的排序列表。

2 个答案:

答案 0 :(得分:3)

使用OrderedDict对键和值的增量进行maping:

>>> from collections import OrderedDict
>>> d = {0.1:1,0.2:2}
>>> d
{0.2: 2, 0.1: 1}
>>> od = OrderedDict(d)
>>> od
OrderedDict([(0.2, 2), (0.1, 1)])
>>> newOrderedDict = OrderedDict(map(lambda (x,y): (x+5, y), od.items()))
>>> newOrderedDict
OrderedDict([(5.2, 2), (5.1, 1)])

请注意orderedDict不断插入顺序而不是值顺序,所以如果你想要值顺序,只需在构建新的orderedDict之前对映射列表进行排序

>>> newOrderedDict = OrderedDict(sorted(map(lambda (x,y): (x+5, y), od.items()), key=lambda (x,y):x))
>>> newOrderedDict
OrderedDict([(5.1, 1), (5.2, 2)])

答案 1 :(得分:0)

字典未排序(以可重现的方式供用户使用)。如果您的目标只是相同的字典,但每个键增加a,这将起作用:

>>> data = {0.0: 100, 0.1: 200, 0.2: 300, 0.3: 400}
>>> a = 7
>>> new_data = {key + a: value for key, value in data.items()}
>>> new_data
{7.0: 100, 7.1: 200, 7.2: 300, 7.3: 400}