将python中的有序dict转换为普通dict并提取值

问题描述

我有一个包含纬度和经度的csv文件

-37.8994,144.9799
-37.8063,144.9964
-37.8901,144.8885

我有python脚本,可将这些值从地址解析转换为位置。

import csv
import reverse_geocoder as rg 

with open('bb.csv',"rt",encoding='ascii') as infile:
    read = csv.reader(infile)
    for row in read :
        result = rg.search(row)
        print(type(result[0]))
        print(result)

脚本输出

Loading formatted geocoded file...
<class 'collections.OrderedDict'>
[OrderedDict([('lat','-37.88214'),('lon','144.98215'),('name','Elwood'),('admin1','Victoria'),('admin2','Port Phillip'),('cc','AU')])]
<class 'collections.OrderedDict'>
[OrderedDict([('lat','-37.8'),'145'),'Abbotsford'),''),'-37.857'),'144.89769'),'Williamstown'),'Hobsons Bay'),'AU')])]

我正在努力提取密钥的值-名称,admin1,admin2和cc。

基本上,我想将csv文件中的经纬度长值转换为它们的位置值,然后将这些值粘贴回CSV。请有人帮忙。

解决方法

您对这些字典的Python打印表示感到困惑。无论是否定购,这根本不是问题,只是您没有打印要打印的内容。

    for row in read:
        result = rg.search(row)
        print(type(result[0]))
        for item in result:
            print(",".join("'%s': '%s'" % (k,v) for k,v in item.items()))
            # or maybe
            print(",".join([item['lat'],item['lon']]))

这类似于print(print)只是打印Python的print函数的表示形式,而不是其实际内容的方式(无论如何,这对于普通的阅读者来说都是无用的)

,

这很容易,您可以执行json.dumps()(由于无序,避免直接使用dict()):

import csv
import reverse_geocoder as rg 
import json
from collections import OrderedDict

with open('bb.csv',"rt",encoding='ascii') as infile:
    read = csv.reader(infile)
    for row in read :
        result = rg.search(row)
        dicres = json.loads(json.dumps(OrderedDict(result)))

现在dicres是你的字典。