我有一个案例,到目前为止,当输入文件是这样的时候我成功实现了字典:
line1 field1 field2 field3 field4 field5
line2 field1 field2 field3 field4 field5
依旧.....
我将行号作为键,将tuple (field1, field2, field3, field4)
作为字典的相应值。现在,我想将field5作为key (field1, field2, field3, field4)
的值。这意味着,tuple (field1, field2, field3, field4)
需要同时具有关键和价值。在python中这种实现是否可行?
答案 0 :(得分:0)
如果我理解你的问题,是的。但是你要浪费大量的空间用于大型场景。
dic = {}
tuple1 = ("field1","field2","field3","field4")
dic["line1"] = tuple1
dic[tuple1] = "field5"
print dic["line1"]
print dic[tuple1]
答案 1 :(得分:0)
这意味着,元组(field1,field2,field3,field4)需要同时是键和值。这种实现在python中是否可行?
是。没有什么可以阻止你这样做:
key = ("f1", "f2", "f3", "f4", "f5")
value = ("f1", "f2", "f3", "f4", "f5")
d = {key: value}
如果我理解你的话,你到目前为止一直在做这样的事情:
line_no = 1
d = {}
for line in open(FILE):
d[line_no] = line # line = ("f1", "f2", "f3", "f4")
line_no += 1
...
如果没有,请详细说明我错在哪里或发布你的源代码:)
编辑:
好的,感谢您的评论,我想我现在明白了。我会这样做:
d = {}
for line in open(FILE):
d[line] = []
d[line].append(f5) # line = ("f1", "f2", "f3", "f4"), f5 = timestamp
这样你就可以使用整个元组作为键,并可以从具有相同f1,f2,f3,f4的记录中减去时间戳(f5)。对我而言,在SQL中似乎更容易做到。
这样,随着负载的增加,你将有不断的查找时间和线性时间。但是如果关键是非常重要的话,我认为你会受到一点性能损失。
让我想一想你是如何相互吸收时间戳的。
EDIT2:
是的,您可以列出该对中的第一个元素:fl = [p [0] for p in pairs]]然后筛选出超过1的任何人:
像这样的东西l2 = [l如果len(l)>则为l 1]
但这似乎不是很有效..
答案 2 :(得分:0)
http://docs.python.org/library/functions.html?highlight=tuple#tuple
元组是一种不可变的序列类型,如序列类型中所述 - str,unicode,list,tuple,bytearray,buffer,xrange。对于其他 容器看到内置的dict,list和set类,以及 收藏模块。
元组是不可变的,这意味着你不能从元组中追加或删除项目。您必须重建变量才能更改它。如果您打算及时更改可迭代变量,请使用list
。
除了元组是不可变的,问题有点模糊。
这是一种将field5
附加到词典的方法。
a = {1:(f1,f2,f3,f4), 2:(f1,f2,f3,f4)} # this is our dictionary contains tuple
for key, value in a.iteritems(): # iterate over dictionary
a[key] += (field5,) # comma is important, you can only concanate tuple with tuple.
# or you can do
a[linenumber] += (field5,)