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

2024-09-28 21:26:43 发布

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

我有一个带有纬度和经度的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'), ('lon', '145'), ('name', 'Abbotsford'), ('admin1', 'Victoria'), ('admin2', ''), ('cc', 'AU')])]
<class 'collections.OrderedDict'>
[OrderedDict([('lat', '-37.857'), ('lon', '144.89769'), ('name', 'Williamstown'), ('admin1', 'Victoria'), ('admin2', 'Hobsons Bay'), ('cc', 'AU')])]

我正在努力提取关键字的值——name、admin1、admin2和cc

基本上,我希望将csv文件中的lat、long值转换为它们的位置值,并将这些值粘贴回csv。请有人帮帮忙


Tags: 文件csvname脚本resultcollectionsclasscc
2条回答

您对这些词典的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是你的口述

相关问题 更多 >