Python 从输出字典中的重复项和交换值创建字典

Python 从输出字典中的重复项和交换值创建字典,python,dictionary,Python,Dictionary,寻找最有效的方法来复制字典中的每个项,但交换两个属性的属性值并附加到新字典中 (属性“juncA”和“juncB”的值必须在复制的项上交换) 非常简单:获取“当前”字典中的内容并生成“所需”输出 当前: { "junctionMatrix": [ { "attributes": { "WCU": "C1", "calcMethod": "AERIAL", "juncA": "S47D", "juncB": "

寻找最有效的方法来复制字典中的每个项,但交换两个属性的属性值并附加到新字典中

(属性“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}}
{'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}}
{'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}}]}

这也可能对你有用

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)
结果:

{'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}}
{'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}}]}

这也可能对你有用

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)
结果:

{'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}}
{'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}}]}

是的,你是对的,很简单。那么,您尝试过什么呢?对于列表中的k,v(data.items())+list(dupDict.items()):dic_new.setdefault(k,[])。append(v)else:dic_new={k:v if len(v)>1 else v[0]对于k,v在dic_new.items()中打印'***dict 3***'打印json.dumps(dict3[“junctionMatrix”][0],sort_keys=True)是,你是对的,这很简单。那么,您尝试过什么呢?对于列表中的k,v(data.items())+list(dupDict.items()):dic_new.setdefault(k,[])。append(v)else:dic_new={k:v if len(v)>1 else v[0]对于k,v在dic_new.items()中打印'***dict 3***'打印json.dumps(dict3[“junctionMatrix”][0],sort_keys=True)固溶体!固溶体!