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

2024-06-26 14:54:05 发布

您现在位置: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循环获得它吗

多谢各位


Tags: 文件csvkey数据结构data词典cap地点
3条回答

像这样的事情能奏效吗

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 = { '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()])

您可以尝试以下方法:

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中保证不存在空行,则可以删除空行检查

相关问题 更多 >