3

Python3:

dct = {'Mazda': [['Ford', 95], ['Toyota', 20], ['Chrysler', 52], ['Toyota', 5], ['Toyota', 26]]}

値がリスト内のリストである上記の辞書があります。私がやりたいのは、リスト内の同じ項目を組み合わせて、その値に整数を追加することです。

例えば。トヨタはそこに 3 倍いるので、すべての数字を組み合わせて別のリストを作成します

[Toyota, 51]

最終結果はこの順序である必要はありません

dct = {'Mazda': [['Ford', 95], ['Toyota', 51], ['Chrysler', 52]]}
4

4 に答える 4

3

質問の入力について:

dct = {'Mazda': [['Ford', 95],  ['Toyota', 20], ['Chrysler', 52],
                 ['Toyota', 5], ['Toyota', 26]]}

これを試して:

from collections import defaultdict

for k, v in dct.items():
    aux = defaultdict(int)
    for car, num in v:
        aux[car] += num
    dct[k] = map(list, aux.items())

dctこれで、期待される結果が含まれます。

dct
=> {'Mazda': [['Ford', 95], ['Toyota', 51], ['Chrysler', 52]]}
于 2012-11-29T21:35:11.590 に答える
0

使用itertools.groupby()

In [66]: dct = {'Mazda': [['Ford', 95], ['Toyota', 20], ['Chrysler', 52], ['Toyota', 5], ['Toyota', 26]]}

In [67]: from itertools import groupby

In [68]: from operator import *

In [69]: dct = {'Mazda': [['Ford', 95], ['Toyota', 20], ['Chrysler', 52], ['Toyota', 5], ['Toyota', 26]]}

In [70]: { x: [[k,sum(y[1] for y in g)] for k,g in groupby(sorted(dct[x]),
                                              key=itemgetter(0))] for x in dct}

Out[70]: {'Mazda': [['Chrysler', 52], ['Ford', 95], ['Toyota', 51]]}
于 2012-11-29T21:36:26.537 に答える
0
dct = {'Mazda': [['Ford', 95], ['Toyota', 20], ['Chrysler', 52], ['Toyota', 5], ['Toyota', 26]]}

newdct = {}
for item in dct:
    newdct[item] = []
    unqItems = {}
    for val in dct[item]:
        if val[0] not in unqItems:
            unqItems[val[0]] = 0
        unqItems[val[0]] += val[1]
    for u in unqItems:
        newdct[item].append([u, unqItems[u]])
print newdct
于 2012-11-29T21:35:26.000 に答える
0

2 つのリストを保存します。1 つは車の名前、もう 1 つは番号です。ディクショナリ内のリストを反復処理し、車がまだ存在しない場合は各リストに新しい要素を追加するか、そうでない場合は車のインデックスに番号を追加します。最後にzip()、2 つのリストを一緒にリストします。

于 2012-11-29T21:29:18.133 に答える