изменить словарь - PullRequest
       13

изменить словарь

1 голос
/ 01 декабря 2011

Мне нужно изменить словарь. У меня есть словарь с целочисленными значениями и хочу заменить каждое значение на долю от суммы всех значений, например: 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 ]

3 голосов
/ 01 декабря 2011

Вы можете использовать словарь понимания.

def turnIntoFractions(d):
   total = float(sum(d.values()))
   return {key:(value/total) for key,value in d.items()}
1 голос
/ 01 декабря 2011

Ваша первая проблема заключается в том, что вы используете сумму ключей, а не значения:

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 голосов
/ 01 декабря 2011

ваш код имеет правильное представление, но также есть несколько мелких ошибок.Вот рабочий код:

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, а также ключи, которые являются строками, должны быть заключены в кавычки

0 голосов
/ 01 декабря 2011

Следующий код Python изменит ключи словаря для получения значений с плавающей запятой.

   def turnIntoFractions(mydict):
      total = sum(mydict.values())
      for key in mydict:
        mydict[key] = float(mydict[key]) / total
0 голосов
/ 01 декабря 2011

Использовать словарное понимание

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())
0 голосов
/ 01 декабря 2011

Похоже, вы хотите отредактировать dict на месте, но ваш код возвращает новый объект, что на самом деле лучше.

def turnIntoFractions(mydict):
    values=d.values()
    total=float(sum(values))
    result = {}
    for key, val in mydict.items():
        result[key] = val/total
    return result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...