【问题标题】:how do i remove a duplicate lines in a list using a function?如何使用函数删除列表中的重复行?
【发布时间】:2020-11-04 16:10:09
【问题描述】:
def remove_repeated_lines(data):
    lines_seen = set() # holds lines already seen
    d=[]
    for t in data:
        if t not in lines_seen: # check if line is not duplicate
                d.append(t)
                lines_seen.add(t)
    return d

a=[{'name': 'paul', 'age': '26.', 'hometown': 'AU', 'gender': 'male'},
{'name': 'mei', 'age': '26.', 'hometown': 'NY', 'gender': 'female'},
{'name': 'smith', 'age': '16.', 'hometown': 'NY', 'gender': 'male'},
{'name': 'raj', 'age': '13.', 'hometown': 'IND', 'gender': 'male'}]

age=[]
for line in a:
    for key,value in line.items():
        if key == 'age':
           age.append(remove_repeated_lines(value.replace('.','___')))

print(age)

输出是 [['2', '6', '___'], ['2', '6', '___'], ['1', '6', '___'], ['1', '3', '___']]

我想要的输出是['26___','16___','13___']

这是我从字典值中删除重复行的代码。运行代码后,重复的行没有被删除。

【问题讨论】:

  • 发布列表内容
  • @bigbounty 我已经发布了我的代码的详细信息
  • 期望的输出应该有一个下划线还是三个?如果他们只应该有一个,那么为什么首先用三个下划线而不是一个替换句点呢?

标签: python dictionary duplicates


【解决方案1】:

您可以使用集合推导以更易读的方式轻松完成:

age = list({
    line['age'].replace('.', '___')
    for line in a
    if 'age' in line
})

输出:

['26___', '16___', '13___']

【讨论】:

    【解决方案2】:
    In [37]: a=[{'name': 'paul', 'age': '26.', 'hometown': 'AU', 'gender': 'male'},
        ...: {'name': 'mei', 'age': '26.', 'hometown': 'NY', 'gender': 'female'},
        ...: {'name': 'smith', 'age': '16.', 'hometown': 'NY', 'gender': 'male'},
        ...: {'name': 'raj', 'age': '13.', 'hometown': 'IND', 'gender': 'male'}]
    
    In [40]: set(i["age"].replace(".","")+"_" for i in a)
    Out[40]: {'13_', '16_', '26_'}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多