我的数据结构有很多重复。如果我要创建一个筛选列表以列出所有唯一类型,我会
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']
的内容。现在我想要类似于描述性名称的类型以及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])
我得到一个列表,但有很多重复,而不是所有类型的代表。这段代码有什么问题?
答案 0 :(得分:1)
types = set((r['type_id'], r['type_name']) for r in file)
Python有一个set
类型内置,它是一个无序的元素集合。您可以使用这一行创建一组唯一的(type_id, type_name)
元组。
答案 1 :(得分:1)
在原始代码中,将始终执行if
语句,这可能会导致大量重复。 type_ids
是一个字符串列表;你的if语句正在检查列表的成员资格。 [type_id, type_name]
中没有type_ids
形式的列表。我不确定您是否正在寻找已经存在的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