【问题标题】:Csv files and giving dictionary certain keysCSV 文件并为字典提供某些键
【发布时间】:2016-11-01 13:10:14
【问题描述】:

我有一个以摄氏度为单位的 Csv 文件。像这样:

17;15;13;13;12;13;14;15;15;16;17;18;19;21;23;25;25;23;22;22;21;19;18;18

每个数字是一天中 X 小时的温度,csv 是有序的。 现在我想给每个条目一个键,像这样:

{0: 17, 1: 15, 2:13, 3: 13, 4: 12, ... 23: 18}

是的,我不使用 AM / PM 时间格式,我知道如何读取 csv 文件并将其作为字典列表返回,我的问题是如何给它某些键。

def read_temp(file_csv):
    import csv
    with open('file_csv', 'rU') as file_csv:
         reader = csv.DictReader(file_csv)
         result = []
         for d in reader:
              result.append(d)
    return result

我可以使用 fieldnames = ['0' , '1', '2', '3, '4', '5',... '23'],但这并不是最好的方法,想象一下,我必须为 100 个键做到这一点......

有人知道更好的方法吗?提前 Ty。

【问题讨论】:

  • 如果温度是有序的,给出的键是0,1,2,3...为什么不把它们放到一个列表中呢?

标签: python python-2.7 python-3.x csv


【解决方案1】:

要使用您给出的示例中的数字键,请尝试以下操作:

result = {}   # a dictionary, not a list
for idx, d in enumerate(reader):
    result[idx] = d

enumerate 函数将为您提供从 0 开始的 idx 以及每个数据项 d

但我认为@SilentMonk 是对的——您拥有的现有代码可以让您访问result[0] 就好了。

编辑我又看了DictReader。试试这个:

reader = csv.DictReader(file_csv, fieldnames=range(24))

其余代码保持不变。那应该给你你所期望的。 range(24) 生成列表 [0, 1, ..., 23]。文件每一行中的 24 个值将被赋予从 0 到 23 的相应键。

【讨论】:

  • 是的,它有效,我缺少分隔符 = ';'在 csv.DictReader 上。
  • @EXT 很高兴听到这个消息! :)
  • 顺便说一句,这些值是字符串,我怎样才能将它们更改为整数?
  • 之前result.append(d)d = {k:int(v) for k,v in d.iteritems()}
【解决方案2】:

一种可能的方法是使用range(24) 压缩它们,例如:

>>> temps = "17;15;13;13;12;13;14;15;15;16;17;18;19;21;23;25;25;23;22;22;21;19;18;18".split(";")
>>> temps
['17', '15', '13', '13', '12', '13', '14', '15', '15', '16', '17', '18', '19', '21', '23', '25', '25', '23', '22', '22', '21', '19', '18', '18']
>>> zip(range(24),temps)
[(0, '17'), (1, '15'), (2, '13'), (3, '13'), (4, '12'), (5, '13'), (6, '14'), (7, '15'), (8, '15'), (9, '16'), (10, '17'), (11, '18'), (12, '19'), (13, '21'), (14, '23'), (15, '25'), (16, '25'), (17, '23'), (18, '22'), (19, '22'), (20, '21'), (21, '19'), (22, '18'), (23, '18')]
>>> dict(zip(range(24),temps))
{0: '17', 1: '15', 2: '13', 3: '13', 4: '12', 5: '13', 6: '14', 7: '15', 8: '15', 9: '16', 10: '17', 11: '18', 12: '19', 13: '21', 14: '23', 15: '25', 16: '25', 17: '23', 18: '22', 19: '22', 20: '21', 21: '19', 22: '18', 23: '18'}
>>>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多