python理解来自两个列表或zip

时间:2014-02-09 03:22:55

标签: python list-comprehension

我有两个清单:

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和理解,但似乎无法使其工作。我可以通过双循环来轻松实现这一点,但我正在尝试学习pythonesque方法。

例如,这似乎不起作用:

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

谢谢!

2 个答案:

答案 0 :(得分: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使用的内存不到dict的十分之一。

答案 1 :(得分:0)

虽然上面的Huge的答案很花哨,但我想补充两点。

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

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

    似乎{'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')]