从旧字典键生成新字典键

2024-09-29 21:44:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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"

我该怎么做呢?非常感谢你的帮助!你知道吗


Tags: street字典进程itemunitedkingdom动态创建high
2条回答

你不需要正则表达式,你有多种选择:

一旦您信任数据,就可以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'}

如果您可以确定原始词典的内容,但首先无法获得所需格式的内容,那么可以使用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'

相关问题 更多 >

    热门问题