3

重複した最初の要素を含むリストのソート済みリストがあります。現在、私は解決策を得るためにそれを繰り返しています。

[['5th ave', 111, -30.00, 38.00],
['5th ave', 222, -30.00, 33.00],
['6th ave', 2224, -32.00, 34.90]]

これを最初の要素に基づいてリストのリストに変換するエレガントなリスト内包表記が必要です。

['5th ave', [[111, -30.00, 38.00] , [222, -30.00, 33.00]]

ありがとう

4

3 に答える 3

1
data = [['5th ave', 111, -30.00, 38.00],
['5th ave', 222, -30.00, 33.00],
['6th ave', 2224, -32.00, 34.90]]

previous   = ""
listOfData = []
result     = []
for currentItem in data:
    if currentItem[0] != previous:
        if listOfData:
            result.append([previous, listOfData])
            listOfData = []
        previous = currentItem[0]
    listOfData.append(currentItem[1:])

if listOfData:
    result.append([previous, listOfData])

print result

出力

[['5th ave', [[111, -30.0, 38.0], [222, -30.0, 33.0]]], ['6th ave', [[2224, -32.0, 34.9]]]]

これにより、順序も維持されます。

編集:

defaultdict私は数行を減らすことができました

from collections import defaultdict

data = [['5th ave', 111, -30.00, 38.00],
['5th ave', 222, -30.00, 33.00],
['6th ave', 2224, -32.00, 34.90]]

unique, Map = [], defaultdict(list)
for item in data:
    if item[0] not in unique: unique.append(item[0])
    Map[item[0]].append(item[1:])
print [(item, Map[item]) for item in unique]

これはまだ秩序を維持しています。

于 2013-09-02T06:12:02.290 に答える