0

我使用以下方法创建了一个列表字典:

names = defaultdict(list)

我正在从文本文件中读取一行,将其分成 3 列。我将该行的第一列作为键,将其他两列作为列表中的值。我使用以下代码段如下:

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 的数量以及每种类型之间的时间差。例如,对于 key 00:12:34:23:45:67,有 3 134 和 1 136。该键的 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]))

现在,要从 max/min 中获取计数和差异:

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 回答