用于创建字典的python帮助循环



大家好,我有CSV文件中的这样一个数据结构。我想创建一本按地点划分的词典,其中包含当天的各种日期。

DATA        | LUOGO     | CAP       | KEY
05/05/12    LUOGO1       05254        545122
05/05/12    LUOGO2       05554        545745
05/05/12    LUOGO3       05444        555544
05/05/12    LUOGO4       05774        777888
05/05/12    LUOGO5       05854        542225
06/05/12    LUOGO1       05554        585547
06/05/12    LUOGO2       07854        545888
06/05/12    LUOGO3       04544        585858
06/05/12    LUOGO4       05778        789585
06/05/12    LUOGO5       05785        525477

我会用for循环得到这样的东西,我已经想了好几天了,但我找不到一个解决方案,我想这是微不足道的

luoghi = { 'LUOGO1': 
{'05/05/12': {'data': '05/05/12', 'LUOGO': 'LUOGO1', 'CAP': '05254', 'KEY': '545122'},
'06/05/12': {'data': '06/05/12', 'LUOGO': 'LUOGO1', 'CAP': '05554', 'KEY': '585547'}},
'LUOGO2': {'05/05/12': {'data': '05/05/12', 'LUOGO': 'LUOGO2', 'CAP': '05554', 'KEY': '545745'},
'06/05/12': {'data': '06/05/12', 'LUOGO': 'LUOGO2', 'CAP': '07854', 'KEY': '545888'}}
}

print(luoghi['LUOGO1']['05/05/12'])

结果:

{'data': '05/05/12', 'LUOGO': 'LUOGO1', 'CAP': '05254', 'KEY': '545122'}

有人能告诉我如何用FOR循环得到它吗?

非常感谢

这里是您的代码

luoghi = { 'LUOGO1': 
{'05/05/12': {'data': '05/05/12', 'LUOGO': 'LUOGO1', 'CAP': '05254', 'KEY': '545122'},
'06/05/12': {'data': '06/05/12', 'LUOGO': 'LUOGO1', 'CAP': '05554', 'KEY': '585547'}},
'LUOGO2': {'05/05/12': {'data': '05/05/12', 'LUOGO': 'LUOGO2', 'CAP': '05554', 'KEY': '545745'},
'06/05/12': {'data': '06/05/12', 'LUOGO': 'LUOGO2', 'CAP': '07854', 'KEY': '545888'}}
}

for  key,value in luoghi.items():
for key2,value2 in value.items():
print(value2)

如果你需要列表类型的输出,这里是你的另一个代码

print([val2 for key,val in luoghi.items() for key2,val2 in val.items()])

这样的东西能起作用吗?

import re
luoghi = {}
with open("test.csv", "r") as f:
# Skip the first line
f.readline()
# Iterate on other lines
for line in f:
if line.strip() != "":
data, luogo, cap, key = re.split("s+", line.strip())
# new luogo ?
if not luogo in luoghi.keys():
luoghi[luogo] = {}

# new data for luogo ?
if not data in luoghi[luogo].keys():
luoghi[luogo][data] = {}
# Push data
luoghi[luogo][data] = {
'data'  : data,
'LUOGO' : luogo,
'CAP'   : cap,
'KEY'   : key
}

当然,您的数据保存在test.csv文件中。

你可以试试这个:

luoghi = {}
with open("path/to/luoghi.csv", "r") as csv_file:
_ = csv_file.readline()  # first line is only the header, we don't care about
for csv_line in csv_file.readlines():
stripped_line = csv_line.strip()
if not len(stripped_line):
# in case of an empty line
continue
data, luogo, cap, key = [
field for field in stripped_line.split(" ") if len(field)
]
if luogo not in luoghi:
luoghi[luogo] = {}
luoghi[luogo][data] = {"data": data, "LUOGO": luogo, "CAP": cap, "KEY": key}

如果csv中保证不存在空行,则可以删除空行检查。

我表达错误。我放入的结构只是文件的一个例子。CSV文件处于联机状态,用于打开它的代码如下。

url = "https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-regioni/dpc-covid19-ita-regioni.csv"
r = requests.get(url)
buff = io.StringIO(r.text)
filecsv = csv.DictReader(buff)

我想创建一个名为PLACES的拆分字典,其中每个区域(阿布鲁佐、巴西利卡塔等(对应一个日期(2020-02-24T18:00:00、2020-02-25T18:00:00(,并且在每个日期该行对应所有其他数据。

我希望你写

print(luoghi['Abruzzo']['2020-09-05T17:00:00'])

结果对应

{'data': '2020-09-05T17:00:00', 'stato': 'ITA', 'codice_regione': '13', 'denominazione_regione': 'Abruzzo', 'lat': '42.35122196', 'long': '13.39843823', 'ricoverati_con_sintomi': '32', 'terapia_intensiva': '2', 'totale_ospedalizzati': '34', 'isolamento_domiciliare': '449', 'totale_positivi': '483', 'variazione_totale_positivi': '12', 'nuovi_positivi': '13', 'dimessi_guariti': '2910', 'deceduti': '472', 'casi_da_sospetto_diagnostico': '3396', 'casi_da_screening': '469', 'totale_casi': '3865', 'tamponi': 
'164140', 'casi_testati': '106544', 'note': 'Dal totale dei positivi è stato sottratto 1 caso precedentemente conteggiato 2 volte'}
import pandas as pd
data=pd.read_csv('data/Tect.csv')
data2=data.set_index(['LUOGO','DATA'])
key1=data['LUOGO'].unique()
key2= data['DATA'].unique()
data_dict=dict()
for k1 in key1:
new_dict=dict()
for k2 in key2:
new_dict[k2]=list(data2.loc[k1,k2])
data_dict[k1]=new_dict
data_dict['LUOGO1']['05/05/12']

最新更新