我使用以下方法创建了一个列表字典:
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类型的结果。我很多天都在努力解决这个问题。请帮忙。非常感谢。
答案 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