2013-05-26 4 views
2

У меня есть dict с целыми значениями, и я хотел бы выполнить операцию над каждым значением в dict. Я хотел бы использовать цикл for для этого, но я не могу понять это правильно. Что-то вроде:Для каждого значения в dict?

>>>print(myDict) 
{'ten': 10, 'fourteen': 14, 'six': 6} 

>>>for value in myDict: 
... value = value/2 

>>>print(myDict) 
{'ten': 5, 'fourteen': 7, 'six': 3} 
+0

Обратите внимание, что принято, что переменные python называются with_underscores, а не camelCase. – Elazar

+0

@ Elazar Я думал, что это почти полностью личное предпочтение – tkbx

+1

Python имеет сильную культуру с несколько строгими соглашениями. Я уверен, что вы уже слышали о написании * pythonic * кода. Я рекомендую вам прочитать [PEP 8 - Руководство по стилю для кода Python] (http://www.python.org/dev/peps/pep-0008) – Elazar

ответ

4
for k in myDict: 
    myDict[k] /= 2 
+0

То, что мне нужно.Я хотел изменить оригинальный dict, а не просто вернуть значения, разделенные на 2. Вопрос может быть немного неясным. – tkbx

7

Чтобы перебрать ключи и значения:

for key, value in myDict.items(): 
    myDict[key] = value/2 

цикл по умолчанию над словарем итерацию по его ключей, как

for key in myDict: 
    myDict[key] /= 2 

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

карта:

myDict = map(lambda item: (item[0], item[1]/2), myDict) 

понимание:

myDict = { k: v/2 for k, v in myDict.items() } 
+2

Вы не ответили на фактический вопрос: как изменить каждое значение. – Elazar

+0

@ Элазар попросил выполнить операцию и дал пример немодулирующего деления на 2; Я предположил, что он использовал его в качестве примера более сложной итерации. – bokonic

+0

Он, очевидно, собирался изменить значение, он просто не работал для него (потому что он сделал это неправильно). – Elazar

2

Используя метод dict.items() и dict comprehension:

dic = {'ten': 10, 'fourteen': 14, 'six': 6} 
print({k: v/2 for k, v in dic.items()}) 

Выход:

{'ten': 5.0, 'six': 3.0, 'fourteen': 7.0} 
+0

Я сделал редактирование, чтобы добавить этот языковой намек, - и изменил * понимание списка * на * dict-понимание *, со ссылкой, которая объясняет, как они работают (вместе с выражениями генератора и т. Д.). –

+0

@Lattyware: Спасибо за редактирование! –

+0

+1, этот ответ теперь хороший. Понимания Дикта - лучший (и наиболее читаемый и лаконичный) способ сделать это. –

0

Python 3:

>>> my_dict = {'ten': 10, 'fourteen': 14, 'six': 6} 
>>> for key, value in my_dict.items(): 
     my_dict[key] = value/2 
>>> my_dict 
{'fourteen': 7.0, 'six': 3.0, 'ten': 5.0} 

Это изменяет исходный словарь. Используйте // вместо /, чтобы получить разделение полов.

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