2011-12-01 143 views
1

我需要修改字典。我有一个整数值的字典,并希望更换与所有值的总和的比例,例如: census={a:4, b:1, c:3}; turnIntoFractions(census)每个值,应该然后打印{a:0.5, b:0,125 ,c:0,375 }修改字典

我的想法是这样的:

def turnIntoFractions: 
    L=d.keys() 
    total=sum(L) 
    F=[] 
    for count in L: 
     f.append(float(count/float(total)) 
    return F 

我有点卡住了,它不工作..

+0

请用4个空格缩进代码以使钥匙它更具可读性 – Danny

+1

您的代码有许多问题。如果你想得到具体的帮助,你应该说你的意思是“不工作” –

回答

1

你的第一个问题是,你正在做的关键的总和,而不是值:

total = sum(d.values()) 

现在,你可以修改的字典内联,而不是把它变成一个新的列表:

for key in d.keys(): 
    d[key] /= total # or d[key] = d[key]/total 

我以前的代码经过每个键,检索值,然后将总和除以,最后将其存储回到d[key]


如果你想有一个新的字典返回,而不是仅仅修改现有的一个,你可以在开始时e = d.copy(),然后使用e代替。

0

你似乎想编辑字典,但你的代码返回一个新的对象,这实际上是更好的做法。

def turnIntoFractions(mydict): 
    values=d.values() 
    total=float(sum(values)) 
    result = {} 
    for key, val in mydict.items(): 
     result[key] = val/total 
    return result 
0

使用字典理解

sum = float(sum(census.itervalues())) 

newDict = {k : (v/sum) for k,v in census.iteritems()} 

为Python 2.6:

newDict = dict((k,v /sum) for (k,v) in census.iteritems()) 
3

您可以使用字典解析。

def turnIntoFractions(d): 
    total = float(sum(d.values())) 
    return {key:(value/total) for key,value in d.items()} 
+4

我会用'total = float(sum(d.values())'和'{key:(value/total)值在d.items()}' – jcollado

+0

@jcollado这肯定更具可读性。编辑我的答案,谢谢。可能还需要指出的是,'float()'在python3中不是必需的。 – rplnt

0

以下Python代码会将字典的键修改为浮点值。

def turnIntoFractions(mydict): 
     total = sum(mydict.values()) 
     for key in mydict: 
     mydict[key] = float(mydict[key])/total 
0

你的代码有正确的想法,但也有一些小的错误。 这里的工作代码:

def turnIntoFractions(d): 
    L=d.values() 
    total=sum(L) 
    f=[] 
    for count in L: 
     f.append(float(count/float(total))) 
    return f 

census={'a':4, 'b':1, 'c':3} 

print(turnIntoFractions(census)) 

注意到Python是大小写敏感,所以f是不一样的楼,也即是字符串需要加引号