Python嵌套循环迭代列表中的列表 [英] Python nested loop iterate a list in list
问题描述
我正在尝试通过简短的代码来成为一个更好的程序员.我正在尝试遍历列表中的列表,并将其更改为列表中的字典,这是我的代码,请立即告诉我是否有较短的代码可以实现.
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屋!