2012-07-01 91 views
1

我刚刚开始与Python并需要一些帮助。我有包含列表的字典以下列表:如何乘以一个嵌套列表的所有元素

>>> series 
[{'data': [2, 4, 6, 8], 'name': 'abc'}, {'data': [5, 6, 7, 8], 'name': 'efg'}] 
>>> 

我怎样才能乘以一个常数内列出了每个元素,而使用循环做到位。

所以,如果我有:

>>> x = 100 

的代码会导致:

>>> series 
[{'data': [200, 400, 600, 800], 'name': 'abc'}, {'data': [500, 600, 700, 800], 'name': 'efg'}] 

我可以拿出我有限的知识,最好是这样的(我甚至不知道是什么“[:]”是):

>>> for s in series: 
...  s['data'][:] = [j*x for j in s['data']] 
... 
>>> 

如何删除for循环?

解释代码或指向文档的指针也很好。

谢谢!

+2

为什么你想/需要删除'for'循环? – Amber

+0

您技术上在这里有2个for循环(一个在列表comp中)。我不认为有可能将两者都删除,但你可能会删除一个。 – mVChr

回答

0

如何删除for循环?

你可以用列表和字典推导的组合消除环路:

>>> [{k:[j*100 for j in v] if k == 'data' else v for k,v in d.items()} 
    for d in series] 
[{'data': [200, 400, 600, 800], 'name': 'abc'}, {'data': [500, 600, 700, 800], 'name': 'efg'}] 

然而,这不太可读,不再做就地乘法。

所以我想你不应该企图去除循环。你应该继续做你已经做的事情。

对代码或指向文档的解释也很好。

我不认为解释上述代码是很有意义的,因为我们已经确定它不是你正在寻找的。但是也许你想知道[:]在现有代码中的作用。对于这一点,我是指你此相关的问题,解释它的细节:

+0

那么,OP确实表示他们想要在原地进行修改(如果其他东西有对原始列表的引用,可能是可取的)。所以'[:]'确实有用。 – Amber

+0

@Amber:哦,谢谢,我没有看到。我怀疑我的答案不容易修改,以执行适当的操作。 –

0

您可以通过使用map删除列表理解的for循环:

for s in series: 
    s['data'] = map(lambda d: d*x, s['data']) 
0

通过遍历列表中的每个元素映射乘数:

series = [{'data': [2, 4, 6, 8], 'name': 'abc'}, {'data': [5, 6, 7, 8], 'name': 'efg'}] 
x=100 

def mult_elements(series, x): 
    for s in series: 
     s['data']= map(lambda y:y*x, s['data']) 
    return series 

print mult_elements(series, x) 

做它作为一个内胆采用列表理解:

series = [{'data': map(lambda y:y*x, s['data']), 'name':s['name']} for s in series] 
相关问题