検索

ホームページ  >  に質問  >  本文

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日前1134

全員に返信(4)返信します

  • 阿神

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

    出力の順序を維持したい場合は、OrderedDict を使用する必要があります。後続の情報は、順序を維持するために OrderedDict を使用します。混乱している場合は、list を使用して順序を維持してください。set は良い選択です。 リーリー

    返事
    0
  • 阿神

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

    このコードに関する考慮事項をすべて説明してください。


    最初の順序は 順序 です。ここでの順序には 2 つの部分があり、1 つは出力行の順序であり、もう 1 つは項目がマージされた後の順序です。私たちは次のことを観察しました:

    リーリー

    は次のように変更されます:

    リーリー
    1. 出力行の順序を考慮する必要があります: pr333 は pr33w の前に来ます

    2. プロジェクトをマージした後の順序を考慮する必要があります。thisisa は文の前に来ます

    これは、使用するデータ型が順序を維持できる必要があることを意味します


    2 番目は速度です。シーケンス タイプが線形検索であることは誰もが知っています。効率を高めるには、マッピング タイプを使用する方がよいでしょう。

    moling3650 さんがおっしゃるように、3 つの検討を行った結果、OrderedDict が良い選択です。これで行出力の問題は解決できますが、マージプロジェクトでは値ではなくキーのみを使用する必要があるため、OrderedDict を使用するのは残念ですが、現在標準ライブラリには OrderSet オプションがありません。それでなんとかしなければなりません。

    1. OrderedDict の詳細については、OrderedDict を参照してください

    2. 実際には、サードパーティのライブラリ OrderedSet があります
      または自分で実装することもできます。OrderedSet (Python レシピ) を参照してください


    最後に、linkse7en はこの種の文書処理の問題に関して非常に優れた点を持っています。読み取りと書き込みを同時に行うことができれば、読み取りと処理を同時に行うことが間違いなく効率的になります。 > (ドキュメントを処理する必要があるのは一度訪問するだけであるため)() および 討論請見評論部分 moling 大的觀點リソースの節約<​​🎜> (出力はすぐに完了するため、データを保存するためのスペースを無駄にする必要はありません)。ただし、重複したデータのペアが に現れる可能性があることを考慮すると、安定性を確保するにはさらに多くのリソースを費やす必要があります。


    コード (Python3)

    : リーリー

    コード部分についても説明します (私の文章はあまり良くないかもしれませんが、いくつかの経験を共有できます)。

    1 つ目は、

    クラスのアプリケーションです。

    slicePython プログラマーとして、

    シーケンス型

    スライスについてよく知っている必要があります。 リーリー は実際には次のように記述できます:

    リーリー

    メリットは何ですか?

    この機能を使用してスライスに名前を付けることができます。この質問のコードを例に挙げると、当初は

    データ ペア

    その他のデータ を抽出する必要がありました。 リーリー しかし、この方法では、これら 2 つの範囲に名前を付けることができるので、次のようにします。

    リーリー

    よりエレガントで読みやすい方法で

    から値を取得できます。

    items

    2 番目は
    です。この関数は非常に実用的です。例:

    リーリー setdefaultキー値

    がディクショナリ (または他の一致するマッピング タイプ) に存在する場合は、

    を返します。それ以外の場合は、ディクショナリに新しいキーと値のペア key が自動的に挿入され、dic[key] が返されます。 >。 dic[key] = default_value default_value

    最後に共有したいのは、入れ子になったタプルの逆アセンブリです。
    リーリー

    この手法は、ネストされたタプルを簡単に解体するために使用できます。


    皆さん、私が話しすぎると文句を言わないでくれてありがとう...

    返事
    0
  • 怪我咯

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

    パンダを使用した方が便利だと思いますか?

    リーリー

    4 行で問題は解決します
    最初にドキュメントを example.txt として保存しました

    返事
    0
  • 高洛峰

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

    リーリー

    返事
    0
  • キャンセル返事