0

リスト内の複数の一致に基づいて辞書を作成するのに問題があります。

リストの例を次に示します。

items = [["1.pdf", "123", "train", "plaza"],
         ["2.pdf","123", "plane", "town"],
         ["3.pdf", "456", "train", "plaza"],
         ["4.pdf", "123", "plane", "city"],
         ["5.pdf", "123", "train", "plaza"],
         ["6.pdf","123", "plane", "town"]]

私がやろうとしているのは、各リストの最後の 3 つの項目を照合して辞書を作成することです。

したがって、上記のリストに基づいて、目的の出力が次のようになると想定します。

{1 : [["1.pdf", "123", "train", "plaza"],
      ["5.pdf", "123", "train", "plaza"]],
 2 : [["2.pdf","123", "plane", "town"],
      ["6.pdf","123", "plane", "town"]]
 3 : [["3.pdf", "456", "train", "plaza"]]
 4 : [["4.pdf", "123", "plane", "city"]]}
4

4 に答える 4

7

別の出力データ形式を提案できますか?

from collections import *
d = defaultdict(list)

for item in items:
    d[tuple(item[1:])].append(item[0])

これにより、次のようなdictが得られます。

{
    ('123', 'train', 'plaza'): ['1.pdf', '5.pdf'],
    ('123', 'plane', 'town'):  ['2.pdf', '6.pdf'],
    ('123', 'plane', 'city'):  ['4.pdf'],
    ('456', 'train', 'plaza'): ['3.pdf']
}
于 2013-07-30T14:38:51.540 に答える
1

あなたが探しているのはgroupby操作です。パンダを使用している場合:

In [2]: items
Out[2]: 
[['1.pdf', '123', 'train', 'plaza'],
 ['2.pdf', '123', 'plane', 'town'],
 ['3.pdf', '456', 'train', 'plaza'],
 ['4.pdf', '123', 'plane', 'city'],
 ['5.pdf', '123', 'train', 'plaza'],
 ['6.pdf', '123', 'plane', 'town']]

In [3]: df = pd.DataFrame.from_records(items)

In [4]: df
Out[4]: 
       0    1      2      3
0  1.pdf  123  train  plaza
1  2.pdf  123  plane   town
2  3.pdf  456  train  plaza
3  4.pdf  123  plane   city
4  5.pdf  123  train  plaza
5  6.pdf  123  plane   town


In [5]: for n, g in df.groupby([1, 2, 3]):
    print "name", n
    print g
   ....:     
name ('123', 'plane', 'city')
       0    1      2     3
3  4.pdf  123  plane  city
name ('123', 'plane', 'town')
       0    1      2     3
1  2.pdf  123  plane  town
5  6.pdf  123  plane  town
name ('123', 'train', 'plaza')
       0    1      2      3
0  1.pdf  123  train  plaza
4  5.pdf  123  train  plaza
name ('456', 'train', 'plaza')
       0    1      2      3
2  3.pdf  456  train  plaza
于 2013-07-30T14:38:31.037 に答える