将列表中的字典条目拆分为两个
需要在一个字典里进行操作,这个字典的值是一个字典列表。
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()
。