Как проверить набор Python для строки - PullRequest
0 голосов
/ 03 июля 2018

Надеюсь, это не получит отрицательного ответа в названии, но не может придумать лучшего способа объяснить проблему.

Основываясь на предложениях, которые я видел в стеке, я использую наборы, чтобы игнорировать повторяющиеся строки, и это работает до тех пор, пока я не получу вариант использования, в котором строка меняется незначительно, но я все же хочу отфильтровать эту строку как дубликат. В моем примере я не могу найти строку для определенного ключевого слова, поэтому в моем примере ниже я исключаю любую новую строку, где столбец firs, который является идентификатором, уже существует, в данном случае Лондон.

Например.

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

Поэтому я хотел узнать, можно ли просто проверить, есть ли в моем наборе идентификатор Лондон, перед добавлением строки или игнорированием, но я не могу найти никакого способа сделать это. Я попробовал кортежи, но не уверен, что это мое решение, и я не могу создать набор из списка. Мой простой тестовый пример выглядит следующим образом, и в результате я получаю только строку в моем наборе, а не тестовую линию, как это происходит сейчас.

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  

Ответы [ 4 ]

0 голосов
/ 03 июля 2018

Вам нужно извлечь первый разделитель строки, разделенной запятыми, и добавить ее в свой набор. Для этого вы можете либо x.split(',', 1)[0], либо x.partition(',')[0].

Логика идентична обычно используемому рецепту itertools unique_everseen, , доступному в официальных документах .

Рецепт был заново внедрен в стороннюю организацию 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']
0 голосов
/ 03 июля 2018

Похоже, вам нужен дикт, где ключом является первое значение, а не набор.

seen = {}
id = testline.partition(',')[0]
seen[id] = testline
...
if id not in seen:
    ...
0 голосов
/ 03 июля 2018
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           
0 голосов
/ 03 июля 2018

Вы близки к решению:

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 )
...