찾다

 >  Q&A  >  본문

python:怎样合并文档中有重复部分的行?

文档内容如下:

   (数据对)              (信息)
-----------------  ------------------------
  1         2         3        4       5
-----------------  ------------------------
pr333    sd23a2    thisisa    1001    1005
pr333    sd23a2    sentence    1001    1005
pr33w    sd11aa    we    1022    1002
pr33w    sd11aa    have    1022    1002
pr33w    sd11aa    adream    1033    1002
......

第 1, 2 列作为一个 数据对

如果前两列相同,判断后面的是否相同,如果不同就连接起来,合并成一行

如同下面的效果:

pr333    sd23a2    thisisa|sentence    1001    1005
pr33w    sd11aa    we|have|adream    1022|1033    1002
....

小白,不懂怎么做,只能想到用字典,好像又行不通,求各位大神帮忙

大家讲道理大家讲道理2805일 전1132

모든 응답(4)나는 대답할 것이다

  • 阿神

    阿神2017-04-17 17:52:17

    출력 순서를 유지하려면 OrderedDict을 사용해야 합니다. 키는 OrderedDict을 사용하여 순서를 유지합니다. 엉망이 되려면 list을 사용하여 순서를 유지하세요.set 으아악

    회신하다
    0
  • 阿神

    阿神2017-04-17 17:52:17

    이 코드에 대한 모든 고려 사항을 설명하세요.


    첫 번째는 순서입니다. 여기서 순서는 두 부분으로 구성됩니다. 하나는 출력 라인의 순서이고 다른 하나는 항목이 병합된 후의 순서입니다. 우리는 다음을 관찰했습니다:

    으아악

    다음으로 변경:

    으아악
    1. 출력 라인의 순서를 고려해야 합니다. pr333이 pr33w보다 앞에 옵니다

    2. 프로젝트 병합 후 순서를 고려해야 합니다. thisisa가 문장 앞에 옵니다

    이것은 우리가 사용하는 데이터 유형이 순서를 유지할 수 있어야 한다는 것을 의미합니다


    둘째는 속도입니다. 효율성을 위해서는 매핑 유형을 사용하는 것이 좋습니다.

    세 가지 고려 끝에 moling3650의 말대로 OrderedDict가 좋은 선택입니다. 이렇게 하면 라인 출력 문제를 해결할 수 있지만 병합 프로젝트에서는 값이 아닌 키만 사용하면 되므로 OrderedDict를 사용하는 것이 아쉽습니다. 그러나 현재 표준 라이브러리에는 OrderSet 옵션이 없습니다. 그래서 나는 그것을 해야 한다.

    1. OrderedDict에 대한 자세한 내용은 OrderedDict를 참조하세요

    2. 사실 타사 라이브러리인 OrderedSet
      이 있거나 직접 구현할 수도 있습니다. OrderedSet(Python 레시피)

    3. 를 참조하세요.

    마지막으로 linke7en은 이런 문서 처리 문제에 대해 아주 좋은 점을 가지고 있습니다. 동시에 읽고 쓸 수 있다면 읽기와 처리를 동시에 하는 것이 확실히 효율적입니다<🎜. > (한 번 방문하면 문서 처리만 하면 되기 때문에)() 및 討論請見評論部分 moling 大的觀點자원 절약(출력이 즉시 완료되므로 데이터 저장을 위한 공간을 낭비할 필요가 없습니다). 그러나 중복된 데이터 쌍이 여러 행에 걸쳐 나타날 수 있다는 점을 고려하면 여전히 안정성을 보장하기 위해 더 많은 리소스를 소비해야 합니다.


    코드(Python3): 으아악


    코드 부분에 대해서도 설명하겠습니다(제 글이 잘 못 되었을 수도 있지만, 경험을 공유해 드릴 수 있습니다).

    첫 번째는

    수업 신청입니다. slice

    Python 프로그래머로서 우리는

    시퀀스 유형 슬라이싱에 익숙해야 합니다. 으아악

    은 실제로 다음과 같이 쓸 수 있습니다:

    으아악

    어떤 혜택이 있나요?

    이 기능을 사용하여 슬라이스 이름을 지정할 수 있습니다. 이 질문의 코드를 예로 들면, 원래는

    데이터 쌍기타 데이터를 추출하려고 했습니다. 으아악

    그러나 이 방법은 실제로 읽을 만큼 명확하지 않습니다. 따라서 이 두 범위에 이름을 지정할 수 있습니다.

    으아악

    더 우아하고 읽기 쉬운 방식으로

    의 값을 얻을 수 있습니다. items


    두 번째는

    입니다. 이 기능은 매우 실용적입니다. 예를 들면 다음과 같습니다. setdefault 으아악

    키 값

    이 사전(또는 다른 일치하는 매핑 유형)에 있으면 key을 반환합니다. 그렇지 않으면 반환 시 자동으로 사전에 새 키-값 쌍 dic[key]이 삽입되고 <🎜가 반환됩니다. >. dic[key] = default_value default_value

    마지막으로 공유하고 싶은 것은 중첩된 튜플의 분해입니다.
    으아악

    이 기술은 중첩된 튜플을 해체하는 데 쉽게 사용할 수 있습니다.


    말이 너무 많다고 욕 안해주셔서 다들 감사합니다...

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-17 17:52:17

    팬더를 사용하는 것이 더 편리하다고 느끼시나요?

    으아악

    네 줄이면 문제가 해결됩니다
    먼저 문서를 example.txt로 저장했습니다

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-17 17:52:17

    으아악

    회신하다
    0
  • 취소회신하다