2014-12-17 5 views
5

У меня есть словарь, которые выглядят какПрименить функцию всех значений словаря

d= {(1, 8): 94.825000000000003, (2, 8): 4.333} 

Я пытаюсь применить функцию округлять все значения.

Я не хочу воссоздавать словарь.

newD= {} 
for x,y in d.iteritems(): 
    newD+= {x:round(y)} 

Есть ли вещий-способ применить round функции на все значения?

+1

вашего пример фактически не работает, и кажется, что вы воссоздание словаря, делая 'newD' исправьте меня, если я ошибаюсь – jamylak

+0

Это не дубликат. Это не так. – user3378649

ответ

5

Это немного более запутанным, но вы действительно просил «вещий-пути»;)

newD = {k:round(v) for k, v in d.items()} 

Однако, этот словарь понимание будет работать только на 2.7+. При использовании более старой версии Python, попробуйте это более извилистый путь:

newD = dict(zip(d.keys(), [round(v) for v in d.values()])) 

Позвольте мне распаковать это немного:

  • Мы начинаем на переназначение новый словарь (d) объект обратно к новый словарь по запросу (хотя вы можете легко присвоить его то же имя)
  • Внешней dict() обеспечивает конечный результат словарь объекта
  • zip() возвращает список кортежей, где й е я-й кортеж содержит I-й элемент из каждого аргумента последовательности
  • первой последовательности аргументов данной к zip() являются ключами словаря (d.keys())
  • Второй последовательность аргументов дан zip() это закругленные значения после того, как список понимание
  • список постижение округляет каждое значение в словаре значений и возвращает список значений закругленных
+1

Или вы можете просто написать '' d = {k: round (v) для k, v в d.items()} '', но вопрос явно сформулирован * «Я не хочу воссоздать словарь». * – fjarri

+0

@Bogdan хорошая точка, обновлено. Благодаря! – Dan

+0

Элегантное решение @Dan – user3378649

5

Вы могли бы попробовать что-то вроде этого:

for k, v in d.iteritems(): 
    d[k] = round(v) 

Он будет делать на месте округление всех элементов в словаре. В этом конкретном примере он будет работать отлично, однако будьте осторожны - все нормальные оговорки об использовании the round function применяются.

+0

вы округливаете один из членов ключевого словаря словаря, как это может быть ответом? – jamylak

+0

@jamylak Извините, я не понимаю ваш вопрос? Я повторяю каждую пару, пару значений в словаре, вычисляю новое значение и заменяю старый на словарь. –

+0

Нет, вы не, вы просто повторяете ключи. Попробуйте 'print k, v' в вашей петле – jamylak

Смежные вопросы