2014-01-27 37 views
0

我有一个数据结构,有很多重复。如果我要创建一个过滤列表,列出所有的独特的类型,我做创建没有重复列表的列表

type_ids = [] 
for record in file: 
    type_id = record['type_id'] 
    if type_id not in type_ids: 
     type_ids.append(type_ids) 

,我会得到这样的type_ids=['A','B','G']。现在,我想是这样的描述性名称FO类型与ID一起,在结构types = [ ['A','Alpha'], ['B','Beta'], ['G','Gamma'] ]我试图

types = [] 
for record in file: 
    type_id = record['type_id'] 
    type_name = record['type_name'] 
    if [type_id,type_name] not in types: 
     types.append([type_id,type_name]) 

我得到一个名单,但有很多重复的,而不是所有类型的代表。这段代码有什么问题?

+1

对于您想要表示的数据,我肯定会推荐一本字典。 – jayelm

+0

我已经有一个字典,我从中提取这些数据。我需要将这些唯一的类型ID和它们的名称提供给数据库表。 – yayu

+0

如果'''A','B''G']'的格式为'type_ids',则表示没有列表。你在第二块代码中的if语句是询问'type_id'内是否有嵌套列表'type_id,type_name]永远不会成立,所以你的'if'块总是被执行。 – jayelm

回答

1
types = set((r['type_id'], r['type_name']) for r in file) 

Python有一个set型内置即元素的无序集合。你可以用这一行创建一组独特的(type_id, type_name)元组。

+0

谢谢。这非常古怪。我需要这个数据结构是可变的,以后再追加更多的数据。那么你会提出什么建议? – yayu

1

在您的原始代码中,您的if语句将始终执行,这可能会导致大量重复。 type_ids是一个字符串列表;您的if语句正在检查列表的成员身份。 type_ids中没有[type_id, type_name]的列表。我不确定您是否正在寻找已有的type_ids的会员资格或您正在建立的types列表中的会员资格。

相反,你想是这样的:

types = [] 
for record in file: 
    type_id = record['type_id'] # Assuming these two lines get the data correctly 
    type_name = record['type_name'] 
    if type_id not in type_ids: # e.g. if 'A' in ['A', 'B', 'C'] 
    # OR, if [type_id, type_name] not in types: 
     types.append([type_id], [type_name]) 

不过,我建议你存储在dictionary格式的信息,这是专门为相关的键值对设计:

types = {} 
for record in file: 
    type_id = record['type_id'] 
    type_name = record['type_name'] 
    if type_id not in type_ids: 
    # OR, if type_id not in types: 
     types[type_id] = type_name 
+0

我已经编辑了我的问题。在我的程序中从问题中提取问题时出现打字错误。该编辑仍然存在重复。 – yayu

+0

@yayu什么是'文件'? – jayelm