【问题标题】:Deduplicate a list from a file while keeping it in order -python3.5从文件中删除重复列表,同时保持它的顺序-python3.5
【发布时间】:2017-02-09 10:12:21
【问题描述】:

我正在尝试打开一个文件,将其拆分,按字母顺序排序,然后删除重复项。我已经能够打开文件、拆分文件、正确排序并将其放入列表中,但是我无法对其进行重复数据删除。我将如何打印按字母顺序和重复数据删除的列表?

这是我目前拥有的:

userinp = input('Enter file: ')
romeo = open(userinp)
inp = romeo.read()
sections = inp.split()
sections.sort()
shakespeare = list(sections)
for i in sections:
    if i not in shakespeare:
        shakespeare.append(i)
print(shakespeare)

【问题讨论】:

  • 我在理解你想要做什么方面有点问题。
  • 很抱歉。我正在尝试从文件中获取文本,删除重复的单词并按字母顺序打印出来。我遇到的麻烦是让它去重复并按字母顺序排列。我可以得到其中一个,但不能同时得到。这有意义吗?
  • 我的意思是,你可以这样做。所以以我的回答为例,在排序数组上显示列表重复。您是否尝试在排序之前进行复制?
  • 我不想复制任何东西。我有一个包含重复单词的文本,我试图按字母顺序只打印出每个单词中的一个。我是编程新手,所以我很难举一个像你下面这样的例子,它使用定义的列表并将它们应用于我的问题需要从文件中提取文本。
  • 哦,只有一个独特的集合。好的。我现在知道你想要什么了。我会更新我的答案

标签: list duplicates python-3.5 alphabetical


【解决方案1】:

我只是做了一个简单的示例:

a = [9,8,7,6,5,4,3,2,1]
for i in a:
  b[i] = 0
b = [x for x in b]

这将限制您的结果集。

在您的代码中,使用相同的过程:

userinp = input('Enter file: ')
romeo = open(userinp)
inp = romeo.read()
sections = inp.split()
shakespeare = {}
for i in sections:
  shakespeare[i] = 0
shakespeare = [x for x in b]
print(shakespeare)

我的前提是:

  • 遍历数组并注入到地图中,创建唯一键。
  • 然后循环遍历地图,将其变回列表。
    • 这会通过在已排序的庄园中遍历数组来自动排序,但如果您愿意,您始终可以调用 .sort() 来重新确认。

【讨论】:

    【解决方案2】:

    使用OrderedDict

    假设你有file.txt,其中包含

    b
    b
    c
    a
    

    你可以的

    from collections import OrderedDict
    
    with open('file.txt', 'rb') as f:
        lines = f.readlines()
        lines.sort()
        for line in OrderedDict.fromkeys(lines):
            print(line.strip())
    

    会打印出来的

    a
    b
    c
    

    【讨论】:

      猜你喜欢
      • 2010-12-05
      • 2012-07-21
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      相关资源
      最近更新 更多