修改字典

时间:2011-12-01 16:39:01

标签: python dictionary

我需要修改字典。我有一个包含整数值的字典,并希望用所有值的总和除去每个值,例如: 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

我有点陷入困境,而且无法正常工作......

6 个答案:

答案 0 :(得分:3)

您可以使用词典理解。

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

答案 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

答案 2 :(得分:0)

您似乎想要编辑dict,但您的代码会返回一个新对象,这实际上是更好的做法。

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

答案 3 :(得分:0)

使用字典理解

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

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

for python 2.6:

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

答案 4 :(得分:0)

以下Python代码将修改字典的键以浮动值。

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

答案 5 :(得分: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与F不同,并且还需要引用字符串的键