Добавление постоянного целого числа к значению в словаре Python - PullRequest
1 голос
/ 08 марта 2012

Как бы вы добавили постоянное число, скажем, 1, к значению в словаре, если выполняются определенные условия.

Например, если бы у меня был словарь:

dict = {'0':3, '1':3, '2':4, '3':4, '4':4}

Если бы я просто хотел добавить целое число 1 к каждому значению в словаре, чтобы он обновлял dict следующим образом:

dict = {'0':4, '1':4, '2':5, '3':5, '4':5}

Когда я использовал следующий код, в котором Cur_FID является первым в словаре '0', он дал мне значение 5? Это должно было дать мне 4. ??

for lucodes in gridList2:   # a list of the values [3,3,4,4,4] -- have to separate out because it's part of a larger nested list
    if lucodes > 1:
        if lucodes < 5:
            FID_GC_dict[Cur_FID] = lucodes + 1

print FID_GC_dict[Cur_FID]   #returned 5??? weird

Я хочу добавить 1 ко всем значениям, но остановился здесь, когда первое обновление словаря сделало что-то странное.

Ответы [ 3 ]

3 голосов
/ 08 марта 2012

Один простой способ сделать это - использовать объект collections.Counter, который вы можете использовать любым способом, как обычный словарь, но он оптимизирован для хранения количества элементов:

>>> from collections import Counter
>>> d = Counter({'0':3, '1':3, '2':4, '3':4, '4':4})
>>> d
Counter({'3': 4, '2': 4, '4': 4, '1': 3, '0': 3})
>>> d.update(d.keys())
>>> d
Counter({'3': 5, '2': 5, '4': 5, '1': 4, '0': 4})

Что касается выполнения только при выполнении определенных условий, просто используйте понимание или генератор, чтобы передать только список ключей, которые вы хотите увеличить до d.update():

>>> d = Counter({'3': 4, '2': 4, '4': 4, '1': 3, '0': 3})
>>> d.update((k for k, v in d.items() if v == 4))
>>> d
Counter({'3': 5, '2': 5, '4': 5, '1': 3, '0': 3})
1 голос
/ 09 марта 2012

Другой способ сделать это - использовать метод словаря items (), который возвращает список кортежей, значений и значений:

def f(dict):
    for entry in dict.items():
        if entry[1] > 1 and entry[1] < 5:
            dict[entry[0]] = entry[1] + 1
    return dict

Затем вы можете расширить это, чтобы получить произвольную функцию:

def f(dict, func):
    for entry in dict.items():
        if func(entry[1]):
            dict[entry[0]] = entry[1] + 1
    return dict

Для этого может быть предусмотрена такая функция, как:

def is_greater_than_one(x):
    return x > 1

и вызывается следующим образом:

f(input_dictionary,is_greater_than_one)
0 голосов
/ 08 марта 2012

Ваш код говорит следующее:

for each value in [3,3,4,4,4]:
    if 1 < value < 5:
        FID_thingy['0'] = value + 1

Таким образом, он установит FID_thingy['0'] на 4, затем на 4, затем на 5, затем на 5, затем 5. Вы понимаете, почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...