python - 从输出字典中的重复值和交换值创建字典
问题描述
寻找最有效的方法来复制字典中的每个项目,但交换两个属性的属性值并附加到新字典。
(属性“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
}
}
]
}
解决方案
一种方法是使用一个辅助函数来创建新元素并返回它,以便将它附加到列表中:
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}}
推荐阅读
- c# - Coinbase API 签名无效。C# .net 核心和 httpClient
- flutter - 如何让 PageView 回绕到它的第一页?
- java - 根据用户输入分配枚举
- javascript - 以相同的顺序从链接列表中下载图像
- slider - ArrayAdapter OnItemSelectedListener 不起作用
- java - 如何定位特定文件夹以在文件选择器中打开
- python - 当函数被多次调用时,我有这个错误 TypeError: 'int' object is not callable
- ios - 基于 Bool 更新列表 - SwiftUI
- julia - 如何计算两个直方图之间的差异?
- c++ - 使用 for 循环在数组 C++ 中创建模式