2012-05-21 5 views
3

Я получил словарь с объектами значений и строковых ключей:словарь Python с объектов в словарь со строками

dict{ 
'key1': object_1 
'key2': object_2 
} 

И я хотел бы, чтобы преобразовать его в:

dict{ 
'key1': str(object_1) 
'key2': str(object_2) 
} 

Где ул (object_1) представляет собой строковое представление объекта_1. Каков самый простой и самый питонический способ выполнения этого преобразования?

ответ

10
dict((k, str(v)) for k, v in d.iteritems()) 

или в python2.7 +:

{k: str(v) for k, v in d.items()} 

Для более сложных dicts (с кортежей объектов в качестве значений):

dict((k, tuple(str(x) for x in v)) for k, v in d.iteritems()) 

{k: tuple(str(x) for x in v) for k, v in d.items()} 
+1

Хорошо, есть также аналогичный синтаксис для более вложенных вычислений? Например, чтобы преобразовать key1 => array (object, object) в key1 => array (string, string)? – Dejwi

+0

@Dejwi - да, вы можете преобразовать отдельные значения по своему усмотрению. – eumiro

+0

Dejwi, если у вас есть только один вложенный уровень, просто используйте [str (o) для o в объектах] в коде выше. –

2

Использование словаря постижений:

{ k : str(v) for k, v in d.iteritems() } 

Вышеуказанное будет работать в Python 2.7+, и он будет генерировать новый словарь с помощью генератора. Для Python 3, это будет работать так же:

{ k : str(v) for k, v in d.items() } 
+0

'iteritems' не существует в 3, хотя, если вы не используете' items' (нелазовая версия), тот же код не будет работать под обоими. – DSM

+0

@ DSM спасибо, исправлено –

3

Что eurimo сказал, или если вы не хотите, чтобы сделать копию:

for k in d: 
    d[k] = str(d[k]) 
1

Следующая Python цикл должен решить вашу проблему.

for item in d.keys(): 
    d[item]=str(d[item]) 
1

Можно также использовать это, чтобы достичь его без использования каких-либо встроенные методы для словаря:

х = {г: ул (х [г]) при г в х}

0

У меня было сделать что-то похожее на ваш вопрос, но я думаю, что мое решение немного длиннее.

new_dict=dict([(item[0],str(item[1])) for item in d.items()]) 

надеюсь, что это помогает