展开字典键并转换为int

我有一本字典,其中的键是描述列表的字符串:


initial_dict = {'value1':'[1,2,3]',

                'value2':'[4,5,6]'}

我希望如下进行切换,扩展和转换:


new_dict = {1:1,

            2:1,

            3:1,

            4:2,

            5:2,

            6:2}

那就是我想切换键和值,然后我希望字符串中的每个数字成为一个单独的整数键,并且在值方面,我还希望字符串也转换为int,例如'value1'-> 1。


我可以切换键和值:


switched_dict={val:key for (key, val) in initial_dict.items()}

而且我能够交换新的价值观


new_values = {"value1":1, "value2":2}

fixed_values = {k: new_values.get(v, v) for k, v in switched_dict.items()}

所以我现在有一个看起来像这样的字典:


{'[1,2,3]':1, '[4,5,6]':2}

但是我不确定如何扩展密钥并将其转换为单个int


呼唤远方
浏览 185回答 3
3回答

MMTTMM

您可以ast.literal_eval用来将键转换为整数列表:import astfixed_values = {'[1,2,3]':1, '[4,5,6]':2}result = {}for k, v in fixed_values.items():  key_ints = ast.literal_eval(k)  for i in key_ints:    result[i] = v

慕后森

使用ast模块来解析列表。import astinitial_dict = {'value1':'[1,2,3]',                'value2':'[4,5,6]'}expanded_vals = {k: ast.literal_eval(v) for k, v in initial_dict.items()}result = {}for k, v in expanded_vals.items():    for e in v:        result[e] = kprint(result)

忽然笑

如果您想要一个可怕的单线,可以使用initial_dict = {'value1':'[1,2,3]', 'value2':'[4,5,6]'}new_values = {"value1": 1, "value2": 2}new_dict = {z: y  for x, y in ((v, new_values[k]) for k, v in initial_dict.items()) for z in eval(x)}# new_dict = {1: 1, 2: 1, 3: 1, 4: 2, 5: 2, 6: 2}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python