将 python 中的 ordereddict 转换为普通字典并提取值
converting ordered dict in python to normal dict and extract values
我有一个包含纬度和经度的 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 文件中的经纬度值转换为其位置值,并将这些值粘贴回 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
函数的 表示 ,而不是它的实际内容(无论如何对普通人来说都是毫无用处的 reader)。
很简单,你可以做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
是你的命令。
我有一个包含纬度和经度的 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 文件中的经纬度值转换为其位置值,并将这些值粘贴回 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
函数的 表示 ,而不是它的实际内容(无论如何对普通人来说都是毫无用处的 reader)。
很简单,你可以做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
是你的命令。