如何使用python交换字典列表中两个键+值的位置?

2024-06-17 13:14:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含数千个文档的json文件,这些是嵌套文档,我需要交换两个键值对列表中的位置。每个文档都是这样的:

{'DataColeta': '2019-01-02',
'GrupoProduto': 'Etanol',
'Produto': 'ETANOL HIDRATADO COMUM',
'Posto': {'razaosocial': 'POSTO DE GASOLINA N S DA PENHA LTDA',
'CNPJ': '33.267.816/0001-35',
'Distribuidora': 'IPIRANGA PRODUTOS DE PETRÓLEO S.A',
'endereco': 'AVENIDA BRAZ DE PINA,253',
'complemento': '',
'bairro': 'PENHA',
'Latitude': -22.84026333,
'Longitude': -43.281765},
'Ensaios': {'Cor': {'Resultado': 'Incolor', 'Unidade': '', 'Conforme':        'Sim'},
'Aspecto': {'Resultado': 'Límpido e isento de impurezas (LII)',
'Unidade': '',
'Conforme': 'Sim'},
'Condutividade Elétrica': {'Resultado': '97',
'Unidade': 'µS/m',
'Conforme': 'Sim'},
'Massa Específica a 20°C': {'Resultado': '809.8',
'Unidade': 'kg/m³',
'Conforme': 'Sim'},
'Teor Alcoólico': {'Resultado': '93.0',
'Unidade': '% massa',
'Conforme': 'Sim'},
'Potencial Hidrogeniônico (pH)': {'Resultado': '6.8',
'Unidade': '',
'Conforme': 'Sim'},
'Teor de Hidrocarbonetos': {'Resultado': 'Não detectado',
'Unidade': '',
'Conforme': 'Sim'}},
'UF': 'RJ',
'municipio': 'RIO DE JANEIRO',
'id_amostra': '463328'}

我想交换位置的键值对是经度和纬度,所以我可以在MongoDB中进行地理空间查询。它应该在经度之前加上纬度

json文件名为:“amostras”

我要更改的嵌入字段是“Posto”,我尝试了以下操作: ''Python amostras[i][“Posto”].keys()

dict_keys(['razaosocial', 'CNPJ', 'Distribuidora', 'endereco',               'complemento', 'bairro', 'Latitude', 'Longitude'])


def swapPositions(list, pos1, pos2): 

    list[pos1], list[pos2] = list[pos2], list[pos1] 
    return list

List = list(amostras[i]["Posto"].keys())
pos1, pos2 = 6, 7
for i in range(len(amostras)):
    swapPositions(List, pos1+1, pos2-1)

''

但它总是给我一个错误:

“dict\u keys”对象不可调用


Tags: 文档jsondesimkeyslist键值pos1
1条回答
网友
1楼 · 发布于 2024-06-17 13:14:47

在3.6版Python之后,dict键值对按插入顺序排列。如果你把函数重写为:

def order_geodata(doc):
    latitude, longitude = doc['Latitude'], doc['Longitude']
    del doc['Latitude']
    del doc['Longitude']
    doc['Longitude'] = longitude
    doc['Latitude'] = latitude

它将把geodata参数按您想要的顺序放在dict的末尾,用作order\u geodata()目标

确保所有目标json都有“经度”和“纬度”键。否则,您需要将直接dict索引更改为dict.get('key')形式,以防止循环中出现错误

相关问题 更多 >