3

これは初心者の質問です。

リストにさまざまな量の値を含む辞書を作成します。

dict1 = {'a': [0,1,2], 'b': [3,4,5]}
dict2 = {'a': [0,1,2,3], 'b': [4,5,6,7]}

各辞書について、リスト内の項目数は同じです。

LEN(dict1['a']) == LEN(dict1['b'])
LEN(dict1['a']) != LEN(dict2['b'])

それが邪魔にならないように、ここに私の問題があります。辞書の値を一緒に追加しようとしています。

dict1等しいはずです[3,5,7]

dict2等しいはずです[4,6,8,10]

これまでの私のコードは次のようなものです:

for x in dict1:
    results = [dict1[x][i] + results[i] for i in range(len(dict1[x]))]

私が抱えている問題はresults[i]. for 句の前にこのリストを作成しますか?

4

3 に答える 3

4

mapで使用できますoperator.add

>>> from operator import add
>>> map(add,*dict1.values())
[3, 5, 7]
>>> map(add,*dict2.values())
[4, 6, 8, 10]

またはzip、何もインポートlist comprehensionしたくない場合は次のようにします。

>>> [sum(x) for x in zip(*dict1.values())]
[3, 5, 7]
>>> [sum(x) for x in zip(*dict2.values())]
[4, 6, 8, 10]

アップデート:

def func(dic, *keys):
    return [sum(x) for x in zip(*(dic[k] for k in keys))]

>>> dict1 = {'a': [0,1,2], 'b': [3,4,5], 'c':[6,7,8]}
>>> func(dict1,'a')
[0, 1, 2]
>>> func(dict1,'a','b')
[3, 5, 7]
>>> func(dict1,'b','c')
[9, 11, 13]
>>> func(dict1,'b','c','a')
[9, 12, 15]
于 2013-07-12T04:37:27.687 に答える
2

使用zip: Python 2およびPython 3

>>> dict1 = {'a': [0,1,2], 'b': [3,4,5]}
>>> dict2 = {'a': [0,1,2,3], 'b': [4,5,6,7]}

>>> zip(dict1['a'], dict1['b'])
[(0, 3), (1, 4), (2, 5)]

>>> [x+y for (x,y) in zip(dict1['a'], dict1['b'])]
[3, 5, 7]
于 2013-07-12T04:38:31.347 に答える
1
>>> list(map(sum, zip(*dict1.values()))) #py3.x
[3, 5, 7]
>>> 
>>> map(sum, zip(*dict2.values())) #py2.x
[4, 6, 8, 10]
>>> 
于 2013-07-12T04:39:41.483 に答える