2014-02-09 41 views
1

我有两个列表:蟒蛇理解或拉链

labels = chunks[0].split("\n") 
print(labels) 
['Date', 'Open', 'High', 'Low', 'Close', 'Volume'] 

day0 = chunks[1].split("\n") 
print(day0) 
['Feb 7, 2014', '15,630.64', '15,798.51', '15,625.53', '15,794.08', '105,782,495'] 

我希望将它们组合有: [“日期”:“2014年2月7日”,......,“卷':'105,782,495']

我试过使用zip和理解,但似乎无法得到它的工作。我可以很容易地做到这一点与一个双循环,但我想学习python的方式做到这一点。

举例来说,这似乎并没有工作:

zipped = zip(labels, day0) 
print(zipped) 

谢谢!

+0

是什么你说你想无效Python语法。你想要一本字典吗? – DSM

+0

我的[BeautifulSoup答案](http://stackoverflow.com/questions/21654495/python-beautifulsoup4-parsing-google-finance-data/21654539#21654539)到你以前的问题告诉你如何做到这一点。 –

+0

@Martijn Pieters:是的。但我试图将其直接分解成它的组件。再加上你的代码复制给了我一些不同的东西。我想我会把它做到这一点,而不是把两者结合起来。感谢您的帮助! – user1357015

回答

4
zipped = dict(zip(labels, day0)) 

zipped = {lab:day for lab,day in zip(labels, day0)} 

编辑:它看起来像标签将如果有的话很少改变;根据天的股票如何要存储,它可能是更有效地使用一个namedtuple如下:

from collections import namedtuple 

labels = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume'] 
StockDay = namedtuple('StockDay', [s.lower() for s in labels]) 

day0 = ['Feb 7, 2014', '15,630.64', '15,798.51', '15,625.53', '15,794.08', '105,782,495'] 
item = StockDay(*day0) 

print(item) 

导致

StockDay(date='Feb 7, 2014', open='15,630.64', high='15,798.51', low='15,625.53', close='15,794.08', volume='105,782,495') 

则字段可以为

item.date  # => 'Feb 7, 2014' 
访问

这有多重要?

import sys 

print(sys.getsizeof(zipped)) # => 524 bytes 
print(sys.getsizeof(item))  # => 52 bytes 

...... namedtuple使用的内存仅为字典的十分之一以下。

0

虽然上面的Huge的回答足够花哨,但我想补充两点。

  1. ['Date':'Feb 7, 2014', ...., 'Volume':'105,782,495']是蟒蛇无效的语法,

    []表明它是一个列表,而:表明,它可能是一本字典。

    看起来好像{'Date':'Feb 7, 2014', ...., 'Volume':'105,782,495'}会更好。

  2. zip(labels,day0)将只返回一个元组列表,如python文档(http://docs.python.org/2/library/functions.html#zip)所述。

    所以,用

    zipped= zip (labels, day0) 
    

    拉链会像

    [('Date', 'Feb 7, 2014'), 
    ('Open', '15,630.64'), 
    ('High', '15,798.51'), 
    ('Low', '15,625.53'), 
    ('Close', '15,794.08'), 
    ('Volume', '105,782,495')]