2015-12-18 2 views
3

Я довольно новичок в Python, и мне трудно создавать локальные переменные из динамически созданного словаря (т. Е. Для каждой итерации процесса, который я запускаю, словарь может содержать другое число адресов).Создать новые ключи словаря из старых ключей словаря

У меня есть следующий словарь:

{"item['address1']": u"1 High Street", "item['address2']": u'FY3 9JH Blackpool', "item['address3']": u'United Kingdom'} 

И хотел бы получить словарь следующим образом:

item['address1'] = "1 High Street" 
item['address2'] = "FY3 9JH Blackpool" 
item['address3'] = "United Kingdom" 

Как я могу идти об этом? Спасибо вам за помощь!

+7

Где что словарь пришел? Может быть легче решить проблему вверх по течению. – DSM

+2

То, что вы описываете в своем названии, является ужасной идеей, но то, что вы описываете в своем теле вопроса, на самом деле довольно разумно. На самом деле это не переменное число локальных переменных; это будет преобразовывать ваш входной сигнал в более разумный dict. Это поможет понять, почему ваш диктат выглядит таким образом, в первую очередь. – user2357112

+0

Если 'item = {'address1': u'1 High Street '}', тогда 'item [' address1 '] ==' 1 High Street'' – Riccati

ответ

5

Если вы можете быть уверены в содержании своего оригинального словаря и не можете получить его в нужном формате в первую очередь, вот идея с использованием re.

>>> import re 
>>> old = {"item['address1']": u"1 High Street", "item['address2']": u'FY3 9JH Blackpool', "item['address3']": u'United Kingdom'} 
>>> item = {re.sub("^item\['(.*)'\]$", r'\1', k) : old[k] for k in old} 
>>> item 
{'address1': u'1 High Street', 'address2': u'FY3 9JH Blackpool', 'address3': u'United Kingdom'} 
>>> item['address1'] 
u'1 High Street' 
0

Вам не нужно регулярное выражение, у вас есть несколько вариантов:

Вы могли exec довольно безопасно, как только вы доверяете данные:

d = {"item['address1']": u"1 High Street", "item['address2']": u'FY3 9JH Blackpool', 
    "item['address3']": u'United Kingdom'} 
item = {} 
for k, v in d.items(): 
    exec('{} = v'.format(k, v)) 

print(item) 

Выход:

{'address3': 'United Kingdom', 'address2': 'FY3 9JH Blackpool', 'address1': '1 High Street'} 

str.index:

d = {k[k.index("'")+1:k.rindex("'")]: v for k, v in d.items()} 
print(d) 

Выход:

{'address1': '1 High Street', 'address2': 'FY3 9JH Blackpool', 'address3': 'United Kingdom'} 

Или просто str.strip:

d = {k.strip("item[]")[1:-1]: v for k, v in d.items()} 
print(d) 

Выход:

{'address2': 'FY3 9JH Blackpool', 'address3': 'United Kingdom', 'address1': '1 High Street'} 
Смежные вопросы