0

我有一个List统计数据(从原始文本中提取),结构如下:

list_stats = [u'site1.com', u'3,346', u'23', u'0.68%', u'\u20ac0.04', u'\u20ac0.25', u'\u20ac0.85', u'site2.com', u'45,784', u'243', u'0.56%', u'\u20ac0.34', u'\u20ac0.32', u'\u20ac0.43', u'site3.com', u'9,396', u'432', u'4.54%', u'\u20ac890.24', u'\u20ac9.87', u'\u20ac8.93']

我想要一个Dict这样的:

sites = {
    u'site1.com' : [u'3,346', u'23', u'0.68%', u'\u20ac0.04', u'\u20ac0.25'],
    u'site2.com' : [u'45,784', u'243', u'0.56%', u'\u20ac0.34', u'\u20ac0.32'],
    u'site3.com' : [u'9,396', u'432', u'4.54%', u'\u20ac890.24', u'\u20ac9.87', u'\u20ac8.93']
}

到目前为止,我已经对此进行了编码并且它正在工作:

sites = {}
for field in list_stats:
    if 'count' not in locals(): count = 0
    if count == 0:
            sites[field] = []
            current = field
    else:
            sites[current].append(field)
    count = count + 1
    if count == 7:
            count = 0

然而,它似乎并不完美。我相信我们可以想出更干净和优雅的东西。你能更好地重新编码吗?

4

3 回答 3

3

如果您的 python 版本支持dict comprehensions (2.7+)

{k: list_stats[i*7+1:(i+1)*7] for i, k in enumerate(list_stats[::7])}

在这种情况下,它给出了

{u'site1.com': [u'3,346',
                u'23',
                u'0.68%',
                u'\u20ac0.04',
                u'\u20ac0.25',
                u'\u20ac0.85'],
 u'site2.com': [u'45,784',
                u'243',
                u'0.56%',
                u'\u20ac0.34',
                u'\u20ac0.32',
                u'\u20ac0.43'],
 u'site3.com': [u'9,396',
                u'432',
                u'4.54%',
                u'\u20ac890.24',
                u'\u20ac9.87',
                u'\u20ac8.93']}
于 2013-01-15T03:14:12.730 回答
2

我认为您正在寻找模运算符enumerate,.%

sites = {}
for count, field in enumerate(list_stats):
    if count % 8 == 0:
            sites[field] = []
            current = field
    else:
            sites[current].append(field)
于 2013-01-15T03:06:10.647 回答
1

使用字典理解和itertools.grouper解决方案

from itertools import izip_longest
>>> from pprint import PrettyPrinter
>>> pp = PrettyPrinter(indent = 4)
>>> pp.pprint({e[0]: e[1:] for e in izip_longest(*[iter(list_stats)]*7)})
{   u'site1.com': (   u'3,346',
                      u'23',
                      u'0.68%',
                      u'\u20ac0.04',
                      u'\u20ac0.25',
                      u'\u20ac0.85'),
    u'site2.com': (   u'45,784',
                      u'243',
                      u'0.56%',
                      u'\u20ac0.34',
                      u'\u20ac0.32',
                      u'\u20ac0.43'),
    u'site3.com': (   u'9,396',
                      u'432',
                      u'4.54%',
                      u'\u20ac890.24',
                      u'\u20ac9.87',
                      u'\u20ac8.93')}
于 2013-01-15T03:58:45.440 回答