我有一个(未排序的)字典,其中键从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])
现在我有一个我需要分配给新密钥的原始字典值的排序列表。
答案 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}