2016-08-11 2 views
0

У меня есть {} с string -> list отношений, как:Как обновить ключи в словаре?

'Something.Default.' : ['a=initiator', 'b=00:00:00'] 
'Something.Session.' : ['b=acceptor', 'c=7039'] 

Я хотел бы изменить ключи бросить последний .'Something.Default.' должен стать 'Something.Default'.

Это, очевидно, неправильно, но это показывает, что я ищу

for key in my_dictionary: 
    key = key[:-1] 

Как я могу перебирать каждый ключ и изменить его?

+0

Являются ли эти клавиши такими строками, как «Something.Default»? –

+0

@RoryDaulton Да – JAM

+1

Не можете ли вы исправить исходный код данных перед построением словаря? –

ответ

1

Вы не должны изменить изменяемый объект, такой как список или словарь, а итерация его содержание, поэтому лучше создавать новый словарь, изменяющее соответствующие ключи там, где необходимо. Это использует тройной, чтобы обрезать ключ одним символом, если он заканчивается на период ('.'), Иначе используйте оригинальный ключ.

my_dictionary = {key[:-1] if key[-1] == '.' else key: value 
       for key, value in my_dictionary.iteritems()} # Python 2 

Новый словарь переназначается старого имени переменной my_dictionary.

3

Просто создайте новый словарь с изменениями.

orig_dict = {'foox': 'bar', 'bazx': 'bat'} 
new_dict = {key[:-1]: value for key, value in orig_dict.items()} 
1

получить каждый ключ, сделать новый ключ с последним . удален, а затем перенести данные и удалить эту Dict.

for info in dict: 
    if info[-1]=='.': 
    dict[info[:-1]] = dict[info] 
    del dict[info] 
0

Ответ Моргана Тракпа был взломан. но вот небольшая модификация

orig_dict = {key[:-1]: value for key, value in orig_dict.items()} 

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

+1

Это должен быть просто комментарий к его ответу. – chepner

+0

Это правда. Я просто сделал это, чтобы сломать шаги, чтобы сделать его более понятным для читателей. –

+0

К сожалению, у меня недостаточно репутации для комментариев. Переход к началу –

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