0

以下を使用してリストの辞書を作成しました。

names = defaultdict(list)

テキストファイルから1行を読み取り、3列に分割しています。行の最初の列をキーとして作成し、他の2つの列をリストの値として作成しています。次のコードセグメントを次のように使用しました。

with open('f.txt') as f:
    lines = [l.split() for l in f.readlines() if l.strip()]
    for l in lines:
            names[l[0]].append([l[1],l[2]])

私はこのようなテキストファイルを持っています:

00:12:34:23:45:67       134     123.456

45:34:23:45:44:23       133     345.123

3f:32:dr:45:34:r5       133     212.345

00:12:34:23:45:67       134     555.555

00:12:34:23:45:67       136     555.556

00:12:34:23:45:67       134     555.560

プログラムを実行してキーと値のペアを出力すると、出力は次のようになります。

00:12:34:23:45:67 [['134', '123.456'], ['134', '555.555'], ['136', '555.556'], ['134', '555.560']]

45:34:23:45:44:23 [['133', '345.123']]

3f:32:dr:45:34:r5 [['133', '212.345']]

リストの個々の要素にアクセスするにはどうすればよいですか?たとえば、この出力では、各キーの133、134、135、136の数と、各タイプ間の時間差をカウントしたいと思います。たとえば、キー00:12:34:23:45:67の場合、3つの134、1136があります。そのキーの134の最高値と最低値の時間差は555.560-123.456です。この結果は、133、134、135、136のすべてのタイプで必要です。私は何日もこの問題に苦しんでいます。助けてください。とても有難い。

4

2 に答える 2

3

ここでは、より良いデータ構造が整っているようです...

from collections import defaultdict
names=defaultdict(lambda :defaultdict(list))

with open('f.txt') as f:
   lines = [l.split() for l in f.readlines() if l.strip()]
   for l in lines:
       names[l[0]][l[1]].append(float(l[2]))

ここで、最大/最小からのカウントと差を取得するには、次のようにします。

for k,v in names.items():
    for kk,vv in v.items():
        print k,kk,len(vv),max(vv)-min(vv)

出力:

00:12:34:23:45:67 136 1 0.0
00:12:34:23:45:67 134 3 432.104
45:34:23:45:44:23 133 1 0.0
3f:32:dr:45:34:r5 133 1 0.0
于 2012-05-29T17:39:30.733 に答える
0

カウントを計算するには、次のようにします。

counts = {}
for key, values in names.items():
    for v in values:
        if v[0] in counts:
            counts[v[0]] += 1
        else:
            counts[v[0]] = 1
于 2012-05-29T17:36:16.047 に答える