Python嵌套循环迭代列表中的列表 [英] Python nested loop iterate a list in list

查看:180
本文介绍了Python嵌套循环迭代列表中的列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过简短的代码来成为一个更好的程序员.我正在尝试遍历列表中的列表,并将其更改为列表中的字典,这是我的代码,请立即告诉我是否有较短的代码可以实现.

Hi I'm trying to become a better programmer with short and clean code. I'm trying to loop through a list in a list and change it to dictionary inside a list here is my code right now please show me if there is anyway to achieve is with shorter lines of code.

首先,我需要遍历列表以更改毫秒为​​日期,然后我需要遍历并将键添加到列表中,以便知道每个值是什么.

1st I need to loop through the list to change the miliseconds to date and then I need to loop through and add keys to the list so that I know what each value is.

import datetime

formatter = ['Date', 'Open', 'Close', 'High', 'Low', 'Volume']
list = [[1364770800000, 93.2, 93.033, 93.29, 92.9, 116.0018], [1364774400000, 93.25, 93.1, 100, 93.03, 345.58388931]]

print(list)

def mili_to_date(d):
    d /= 1000.0
    return datetime.date.fromtimestamp(d).strftime('%Y-%m-%d')


for i, row in enumerate(list):
    for index, column in enumerate(row):
        if index == 0:
            list[i][0] = mili_to_date(column)
        else:
            pass

for i, row in enumerate(list):
    list[i] = {}
    for index, column in enumerate(row):
        list[i][candles_formatter[index]] = column

print(list)

推荐答案

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

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}]

这篇关于Python嵌套循环迭代列表中的列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆