【问题标题】:How to check a Python Set for a string如何检查 Python 集合中的字符串
【发布时间】:2018-07-03 08:06:43
【问题描述】:

希望这不会在标题上被否决,但想不出更好的方法来解释这个问题。

根据我在 Stack 上看到的建议,我正在使用 Sets 来忽略重复的行,这很有效,直到我得到一个用例,其中行略有变化,但我仍然想将该行作为重复项过滤掉。在我的示例中,我似乎无法在字符串中搜索某个关键字,因此在下面的示例中,我排除了任何新行,其中第一列(即 ID)已经存在,在本例中为伦敦。

例如。

London,Sold,2021-12-07,1000000,301909
London,Sold,2021-12-07,1000000,999999

所以我想知道是否可以在添加或忽略之前检查 ID London 是否存在于我的 Set 中,但我找不到任何方法来做到这一点。我尝试了元组,但不确定这是我的解决方案,我无法从列表中创建一个集合。我的简单测试用例如下,最终结果是我只得到了我的集合中的行,而不是现在发生的测试行。

testline = 'London,Sold,2021-12-07,1000000,301909'
id = 'London'

j="testline2"
seen = set()
seen.add(testline)

if id not in seen:
    seen.add(j)

print seen  

【问题讨论】:

  • 如果你发现这样一个近乎重复的东西,你想保留第一个还是第二个遇到的项目?
  • 保留第一次出现

标签: python string list duplicates set


【解决方案1】:

您似乎想要一个字典,其中键是第一个值,而不是一个集合。

seen = {}
id = testline.partition(',')[0]
seen[id] = testline
...
if id not in seen:
    ...

【讨论】:

  • 你能改一下id的名字吗?隐藏内置插件不是好习惯..
  • 当然,会在以后的帖子中使用,只是将其用作示例,但会记住最佳实践。谢谢
【解决方案2】:
testline = 'London,Sold,2021-12-07,1000000,301909'
id = 'London'

j="testline2"
seen = set()
for element in testline.split(',')
    seen.add(element)
if id not in seen:
    seen.add(j)

print seen           

【讨论】:

    【解决方案3】:

    您已接近解决方案:

    testline = ['London','Sold','2021-12-07','1000000','301909'] #updated
    id = 'London'
    
    j="testline2"
    seen = set(testline) #updated
    if id not in seen:
        seen.add(j)
    
    print (seen )
    

    【讨论】:

    • 与 OP 的代码有什么不同?我认为缩进不是问题。
    • 啊,您将testline 拆分为一个列表。您应该在回答中提及这一点。但是,除非您告诉 OP 如何以编程方式执行此操作,否则我认为这本身不会有太大帮助。
    • 谢谢@tobias_k,我会在以后的回答中考虑你的建议。
    【解决方案4】:

    您需要提取逗号分隔字符串的第一个拆分并将其添加到您的集合中。为此,您可以使用 x.split(',', 1)[0]x.partition(',')[0]

    逻辑与常用的itertools配方unique_everseenavailable in the official docs相同。

    配方已在 3rd 方toolz.unique 中重新实现,可以省去你重新发明轮子的麻烦:

    from toolz import unique
    
    L = ['London,Sold,2021-12-07,1000000,301909',
         'London,Sold,2021-12-07,1000000,999999']
    
    res = list(unique(L, key=lambda x: x.partition(',')[0]))
    
    print(res)
    ['London,Sold,2021-12-07,1000000,301909']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-19
      • 2012-07-14
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多