2016-07-18 2 views
0

У меня есть словарь, в котором я хочу прочитать каждый отдельный ключ назад, пока он не достигнет подчеркивания. Когда он достигнет подчеркивания, он должен остановиться, чтобы я мог установить его элемент равным новой переменной.Как распечатать ключи из словаря назад

Я понимаю, что я могу использовать str.partition() для разделения на определенный символ и что я могу использовать [:: - 1] для чтения строки назад, но я не уверен, как использовать их вместе с Словарь.

Payload_Values = {'Voltage_asleep(V)' : 10, 'Current_asleep(A)' : 5, 'Wattage_asleep' : 50} 
    for c in (Payload_Values.keys()) 
     Payload_Values.partition(_) 
+1

Я не понимаю, что он должен остановиться, поэтому я могу установить его элемент равным новой переменной *. Вы хотите, чтобы вы создали новую строку, в которой текст после подчеркивания заменяется каким-либо другим текстом? Если это не так, можете ли вы привести пример того, какие данные вы хотите иметь до и после изменения, которое вы пытаетесь сделать? – nekomatic

ответ

0

Вам нужно перебирать в Dict с keys() или items(), не iteritems() в Python3 вам нужно преобразовать эти итераторы в списки, в противном случае это приводит к ошибке при добавлении нового элемента в Словаре в то время как итерация (я просто упомянуть, это было хорошо в вашем примере). В противном случае вы близки к решению. Я просто не понимаю полностью, что вы хотите сделать с ключом? Распечатать? Возьмите часть после последнего подчеркивания? Установить новую пару ключ-значение? Не зная об этом, я пытаюсь представить все комбинации, пожалуйста, спросите более конкретно, если вам нужно что-то еще:

# this is because Python3 compatibility: 
from __future__ import print_function 
from future.utils import iteritems 

for key, val in iteritems(Payload_Values): 
    # new key is the part after the last underscore 
    # or the whole string, if it does not contain underscore: 
    new_key = key.split('_')[-1] 

    # new key is the elements separated by `_`, reversed 
    # and rearranged to a string: 
    key_rev = '_'.join(key.split('_')[::-1]) 

    # new key is the complete string reversed: 
    new_key = key[::-1] 

    # 
    # set a new element with the new key: 
    Payload_Values[new_key] = 'your new value' 

    # print the new key: 
    print(new_key) 

# if you want to modify the dict in this loop: 
for key, val in list(Payload_Values.items()): 
    # ... 
    Payload_Values[some_key] = some_value 
+0

New_key = key.split ('_') [- 1] ближе всего к тому, что я искал. К сожалению, похоже, что использование этого будет лишать мой оригинальный ключ связанного с ним числа. Есть ли способ удержать присвоенный ему номер? –

+0

, тогда вам нужно выполнить итерацию с помощью 'iteritems', я соответствующим образом изменил этот пример. в Python2 у вас есть 'dict.iteritems()', но для совместимости с Python3 я показываю с iteritems из 'future.utils'. таким образом, у вас есть соответствующее значение для каждой клавиши по итерации ('val'). – deeenes

+0

также, если вы хотите изменить dict в цикле, вы должны выбрать решение, которое я только что нажал на дно. – deeenes

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