Skip to main content
 首页 » 编程设计

python之转换字典python中的列表列表

2025年05月04日13rubylouvre

我面临以下问题。我有一个从远程 URL 获得的列表列表,代码如下:

import csv 
import urllib.request 
 
text_url = 'https://www.emidius.eu/fdsnws/event/1/query?starttime=1899-01-01T00:00:00&endtime=1899-01-31T23:59:59&minmag=4&maxmag=9&orderby=time-asc&limit=100&format=text' 
 
with urllib.request.urlopen(text_url) as response: 
   my_text = response.read().decode() 
 
lines = my_text.splitlines() 
reader = csv.reader(lines, delimiter='|') 

我可以将阅读器转换为列表列表:

my_list = list(reader) 

我想做的是将列表列表(或在 reader 本身内)转换为列表字典。第一个列表的项目应该成为字典键,而从第二个到最后一个元素,我想将字典值作为列表获取:

my_list[0] # dict keys 
['#EventID', 
 'Time', 
 'Latitude', 
 'Longitude', 
 'Depth/km', 
 'Author', 
 'Catalog', 
 'Contributor', 
 'ContributorID', 
 'MagType', 
 'Magnitude', 
 'MagAuthor', 
 'EventLocationName'] 
 
my_list[1:] # dict values as list 
[['quakeml:eu.ahead/event/18990105_0245_000', 
  '1899-01-05T02:45:--', 
  '41.500', 
  '13.783', 
  '', 
  'AHEAD', 
  'SHEEC', 
  'CPTI04', 
  '1309', 
  'Mw', 
  '4.63', 
  'SHEEC', 
  'Pignataro'], 
 ['quakeml:eu.ahead/event/18990118_2048_000', 
  '1899-01-18T20:48:--', 
  '46.180', 
  '14.500', 
  '4.8', 
  'AHEAD', 
  'SHEEC', 
  'RIBA982', 
  '', 
  'Mw', 
  '4.51', 
  'SHEEC', 
  'Vodice Brnik'], 
 ['quakeml:eu.ahead/event/18990122_0956_000', 
  '1899-01-22T09:56:--', 
  '37.200', 
  '21.600', 
  '', 
  'AHEAD', 
  'SHEEC', 
  'PAPA003', 
  '', 
  'Mw', 
  '6.50', 
  'SHEEC', 
  'Kyparissia'], 
 ['quakeml:eu.ahead/event/18990131_1112_000', 
  '1899-01-31T11:12:--', 
  '66.300', 
  '-19.900', 
  '', 
  'AHEAD', 
  'SHEEC', 
  'AMBSI000', 
  '', 
  'Mw', 
  '5.80', 
  'SHEEC', 
  '[N. Iceland]'], 
 ['quakeml:eu.ahead/event/18990131_2345_000', 
  '1899-01-31T23:45:--', 
  '60.100', 
  '5.500', 
  '30', 
  'AHEAD', 
  'SHEEC', 
  'FEN007', 
  '', 
  'Mw', 
  '4.60', 
  'SHEEC', 
  '[Biornafjorden]']] 

基本上输出应该是这样的:

d['#EventID'] = ['quakeml:eu.ahead/event/18990105_0245_000', 'quakeml:eu.ahead/event/18990105_0245_000', 'quakeml:eu.ahead/event/18990105_0245_000'] 

请您参考如下方法:

使用 csv.DictReader 和 dict.setdefault

例如:

import csv 
 
d = {} 
reader = csv.DictReader(lines, delimiter='|') 
for row in reader:                              #Iterate Each row 
    for k, v in row.items():                    #Iterate Key-Value 
        d.setdefault(k, []).append(v)