字典词典特例

时间:2012-07-02 16:23:18

标签: python dictionary

我有一个案例,到目前为止,当输入文件是这样的时候我成功实现了字典:

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中这种实现是否可行?

3 个答案:

答案 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,)