访问列表的列表值

时间:2012-05-29 17:06:05

标签: python

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

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的数量以及每种类型之间的时间差。例如,对于密钥00:12:34:23:45:67,有3 134个,1 136.该密钥的最高和最低134之间的时差为555.560-123.456。我想要所有133,134,135,136类型的结果。我很多天都在努力解决这个问题。请帮忙。非常感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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