1

我有一个案例,到目前为止,当输入文件如下时,我成功地实现了字典:

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 中可以实现这种实现吗?

4

3 回答 3

0

如果我理解你的问题是正确的,是的。但是你会为一个大的集合浪费大量的空间。

dic     = {}
tuple1  = ("field1","field2","field3","field4")

dic["line1"] = tuple1
dic[tuple1]  = "field5"

print dic["line1"]
print dic[tuple1]
于 2012-07-02T16:37:13.487 回答
0

http://docs.python.org/library/functions.html?highlight=tuple#tuple

tuple 是不可变的序列类型,如序列类型 — str、unicode、list、tuple、bytearray、buffer、xrange 中所述。对于其他容器,请参阅内置的 dict、list 和 set 类以及 collections 模块。

元组是不可变的,这意味着您不能从元组中追加或删除项目。您必须重建变量才能更改它。如果您打算及时更改可迭代变量,请使用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,)
于 2012-07-02T18:08:17.867 回答
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 中完成。

这样,随着负载的增加,您将拥有恒定的查找时间和线性时间。但我认为如果密钥大小不一,你会受到一些性能影响。

让我想想你如何从彼此中提取时间戳..

编辑2:

是的,您可以列出该对中的第一个元素: fl = [p[0] for p in pairs]] 然后过滤掉出现次数超过 1 的任何人:

像这样的东西 l2 = [l for l in fl if len(l) > 1]

但这似乎不是很有效..

于 2012-07-02T16:55:52.733 回答