将列表中的字典条目拆分为两个

0 投票
2 回答
1117 浏览
提问于 2025-04-17 17:45

需要在一个字典里进行操作,这个字典的值是一个字典列表。

 my_dicts = 
           {"A": [
                 { 'key1 a' : 'value1',
                   'key2 a' : 'A, B, C' 
                 },

                 { 'key1 a' : 'value3',  
                   'key2 a' : 'D, E' 
                 }
                ]
              }

我想把列表中第一个字典的某个键,如果这个键的值是用逗号','分开的两个值,拆分成两个单独的字典。

也就是说,上面的字典会变成这样:

my_dicts = 
               {"A": [
                     { 'key1 a' : 'value1',
                       'key2 a' : 'A' 
                     },

                     { 'key1 a' : 'value1',
                       'key2 a' : 'B' 
                     },

                     { 'key1 a' : 'value1',
                       'key2 a' : 'C' 
                     },

                     { 'key1 a' : 'value3',  
                       'key2 a' : 'D' 
                     }

                      { 'key1 a' : 'value3',  
                       'key2 a' : 'E' 
                     }
                    ]
                  }

如果拆分的数量不确定呢?如果有人能帮我解决这个问题就好了。

2 个回答

1

你可以遍历字典里的元素,根据值来创建两个新的字典。然后,把列表中合适的字典替换成这两个新字典:

def splitdict(orig):
    dict1 = {}
    dict2 = {}
    for key, value in orig.items():
        words = value.split(",")
        if len(words) == 2:
            dict1[key] = words[0]
            dict2[key] = words[1]
        else:
            dict1[key] = value
            dict2[key] = value
    return dict1, dict2

my_dicts["A"][0:1] = splitdict(my_dicts["A"][0])
0

我觉得这个解决方案更稳妥,因为它可以处理任意数量的用逗号分隔的值,适用于两个键。

def permutateMap(X):
    result = []
    for key, value in X.items():
        splitted = value.split(',')
        if len(splitted) > 1:
            for s in splitted:
                new_dict = X.copy()
                new_dict[key] = s.strip()
                result += [new_dict]
            return splitList(result)
    return [X]

def splitList(X):
    result = []
    for entry in X:
        result += permutateMap(entry)
    return result


my_dicts = {"A": [
            { 'key1 a' : 'value1, value2', 
              'key2 a' : 'A, B, C' }, 
            { 'key1 a' : 'value3',  
              'key2 a' : 'D, E' }]}

new_dict = {}
for key, value in my_dicts.items():
    new_dict[key] = splitList(value)

print new_dict

顺便说一下,我觉得把这些值存储为元组 ('A', 'B', 'C') 可能更合适、更方便,而不是用逗号分隔的字符串。这样你就不需要进行字符串操作了,比如 split()strip()

撰写回答