寻找最有效的方法来复制字典中的每个项目,但交换两个属性的属性值并追加到新字典中。
(属性“ juncA”和“ juncB”必须在复制的项目上交换其值。)
非常简单:获取“当前”词典中的内容,并产生“所需”输出。
当前:
{
"junctionMatrix": [
{
"attributes": {
"WCU": "C1",
"calcMethod": "AERIAL",
"juncA": "S47D",
"juncB": "CR-03.0",
"juncDistance": 8501.86072183
}
},
{
"attributes": {
"WCU": "C1",
"calcMethod": "AERIAL",
"juncA": "S47B_C",
"juncB": "S47D_S",
"juncDistance": 17535.28122721
}
}
]
}
所需:
{
"junctionMatrix": [
{
"attributes": {
"WCU": "C1",
"calcMethod": "AERIAL",
"juncA": "S47D",
"juncB": "CR-03.0",
"juncDistance": 8501.86072183
}
},
{
"attributes": {
"WCU": "C1",
"calcMethod": "AERIAL",
"juncA": "CR-03.0",
"juncB": "S47D",
"juncDistance": 8501.86072183
}
},
{
"attributes": {
"WCU": "C1",
"calcMethod": "AERIAL",
"juncA": "S47B_C",
"juncB": "S47D_S",
"juncDistance": 17535.28122721
}
},
{
"attributes": {
"WCU": "C1",
"calcMethod": "AERIAL",
"juncA": "S47D_S",
"juncB": "S47B_C",
"juncDistance": 17535.28122721
}
}
]
}
答案 0 :(得分:1)
一种实现方法是使用辅助函数,该辅助函数将创建新元素并将其返回,以便将其添加到列表中:
inDict= {
"junctionMatrix": [
{
"attributes": {
"WCU": "C1",
"calcMethod": "AERIAL",
"juncA": "S47D",
"juncB": "CR-03.0",
"juncDistance": 8501.86072183
}
},
{
"attributes": {
"WCU": "C1",
"calcMethod": "AERIAL",
"juncA": "S47B_C",
"juncB": "S47D_S",
"juncDistance": 17535.28122721
}
}
]
}
# Auxiliary function.
def swap(elem):
newElem = {'attributes': {'WCU':elem['attributes']['WCU'],
'calcMethod':elem['attributes']['calcMethod'],
'juncA':elem['attributes']['juncB'],
'juncB':elem['attributes']['juncA'],
'juncDistance':elem['attributes']['juncDistance']}}
return newElem
# Creating the new dict.
newDict = {'junctionMatrix':[]}
for index, elem in enumerate(inDict['junctionMatrix']):
newDict['junctionMatrix'].append(elem)
newDict['junctionMatrix'].append(swap(elem))
#Printing it.
for i in newDict['junctionMatrix']:
print(i)
结果:
{'attributes': {'WCU': 'C1', 'calcMethod': 'AERIAL', 'juncA': 'S47D', 'juncB': 'CR-03.0', 'juncDistance': 8501.86072183}}
{'attributes': {'WCU': 'C1', 'calcMethod': 'AERIAL', 'juncA': 'CR-03.0', 'juncB': 'S47D', 'juncDistance': 8501.86072183}}
{'attributes': {'WCU': 'C1', 'calcMethod': 'AERIAL', 'juncA': 'S47B_C', 'juncB': 'S47D_S', 'juncDistance': 17535.28122721}}
{'attributes': {'WCU': 'C1', 'calcMethod': 'AERIAL', 'juncA': 'S47D_S', 'juncB': 'S47B_C', 'juncDistance': 17535.28122721}}
答案 1 :(得分:1)
这也可能对您有用。
import copy
demo_dict_cpy = {}
demo_dict_cpy['junctionMatrix'] = []
for each in demo_dict['junctionMatrix']:
if 'juncA' in each['attributes'] and 'juncB' in each['attributes']:
demo_dict_cpy['junctionMatrix'].append(each)
each_copy = copy.deepcopy(each)
each_copy['attributes']['juncA'] = each['attributes'].get('juncB')
each_copy['attributes']['juncB'] = each['attributes'].get('juncA')
demo_dict_cpy['junctionMatrix'].append(each_copy)
print(demo_dict_cpy)
结果:
{'junctionMatrix': [{'attributes': {'WCU': 'C1',
'calcMethod': 'AERIAL',
'juncA': 'S47D',
'juncB': 'CR-03.0',
'juncDistance': 8501.86072183}},
{'attributes': {'WCU': 'C1',
'calcMethod': 'AERIAL',
'juncA': 'CR-03.0',
'juncB': 'S47D',
'juncDistance': 8501.86072183}},
{'attributes': {'WCU': 'C1',
'calcMethod': 'AERIAL',
'juncA': 'S47B_C',
'juncB': 'S47D_S',
'juncDistance': 17535.28122721}},
{'attributes': {'WCU': 'C1',
'calcMethod': 'AERIAL',
'juncA': 'S47D_S',
'juncB': 'S47B_C',
'juncDistance': 17535.28122721}}]}