展开字典键并转换为int

时间:2018-08-14 07:28:40

标签: python dictionary

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

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}

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

7 个答案:

答案 0 :(得分:3)

您可以使用ast.literal_eval将密钥转换为整数列表:

import ast
fixed_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

答案 1 :(得分:1)

使用ast模块来解析列表。

import ast

initial_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] = k

print(result)

答案 2 :(得分:0)

您可以使用以下方法将字符串转换为列表:

string

然后遍历列表,并将当前值添加到新字典中的每个键中。

编辑:有关工作代码,请参见@ jh314答案。他更快。

答案 3 :(得分:0)

使用初始字典理解列表:

initial_dict = {'value1':'[1,2,3]', 'value2':'[4,5,6]'}
new_values = {"value1": 1, "value2": 2}

{int(n): new_values.get(k) for (k,v) in initial_dict.items() for n in v[1:-1].split(',')}

结果:

{1: 1, 2: 1, 3: 1, 4: 2, 5: 2, 6: 2}

答案 4 :(得分:0)

如果您想要一个可怕的单线,可以使用

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}

答案 5 :(得分:0)

从您说的步骤开始,您不确定如何继续,并假设字典中存储的列表始终存储数字:

1)迭代每个键值对

2)解析键的每个字符,如果该字符是数字,则更新新词典

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

for dict_key, dict_value in my_dict.items():
    for character in dict_key[:]:
        if character.isdigit():
            new_dict[character] = dict_value

答案 6 :(得分:0)

如果您想扩展自己的解决方案,则可以在fixed_values上使用字典理解

import ast

# ...
new_values = {"value1":1, "value2":2}
fixed_values = {k: new_values.get(v, v) for k, v in switched_dict.items()}

final_dict = {i: v for (k,v) in fixed_values.items() for i in ast.literal_eval(k)}