且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Python嵌套循环迭代列表中的列表

更新时间:2022-11-22 11:41:23

成为(成为)更好的程序员:

To be(-come) a better programmer:

  • document your functions
  • embrace error handling and think about which errors might happen for creative input

使用列表/字典理解

import datetime as dt
from pprint import pprint # just for formatting

def mili_to_date(d):
    """Uses a time in milliseconds since 1970.1.1 (unix time) and creates a string date"""

    d /= 1000.0
    return dt.date.fromtimestamp(d).strftime('%Y-%m-%d')

def toDict(lis):
    """Secret method to map inner list to keys. Shhh - dont tell no one nothing.

    TODO: Also, when time, implement tests to assure length-equality between mapping and 
    input as well as some error handling if the 'Date' is not a number or something is 
    None. Lenght euqality is important as zip will only work for as much as the shorter
    list is long. If its shorter then length of formatter, some dict keys will not occure.
    Look at itertools.zip_longest() for a zip that fills the shorter lists with defaults."""

    formatter = ['Date', 'Open', 'Close', 'High', 'Low', 'Volume']
    z = zip(formatter,lis) 
    return { key: mili_to_date(val) if key == 'Date' else val for key,val in z}

if __name__ == "__main__": 
    # make me a dictionary
    li = [[1364770800000, 93.2, 93.033, 93.29, 92.9, 116.0018],
          [1364774400000, 93.25, 93.1, 100, 93.03, 345.58388931]]
    L = [toDict(x) for x in li] 
    pprint(L)  

输出:

[{'Close': 93.033,
  'Date': '2013-04-01',
  'High': 93.29,
  'Low': 92.9,
  'Open': 93.2,
  'Volume': 116.0018},
 {'Close': 93.1,
  'Date': '2013-04-01',
  'High': 100,
  'Low': 93.03,
  'Open': 93.25,
  'Volume': 345.58388931}]