文档内容如下:
(数据对) (信息)
----------------- ------------------------
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
....
小白,不懂怎么做,只能想到用字典,好像又行不通,求各位大神帮忙
Jika anda ingin mengekalkan susunan output, anda perlu menggunakan
OrderedDict
kekunci menggunakanOrderedDict
untuk mengekalkan pesanan kena kacau, gunalist
untuk maintain orderset
Terangkan semua pertimbangan untuk kod ini.
Yang pertama ialah pesanan Pesanan di sini mempunyai dua bahagian, satu ialah susunan baris keluaran, dan satu lagi ialah susunan selepas item digabungkan. Kami memerhati:
berubah kepada:
Susunan baris keluaran perlu diambil kira: pr333 datang sebelum pr33w
Perintah selepas menggabungkan projek perlu diambil kira: thisisa didahulukan sebelum ayat
Ini bermakna jenis data yang kami gunakan mestilah dapat mengekalkan susunan
Yang kedua ialah kelajuan Kita semua tahu bahawa jenis urutan adalah carian linear Untuk kecekapan, lebih baik menggunakan jenis pemetaan.
Selepas tiga pertimbangan, seperti yang dikatakan moling3650,
OrderedDict
ialah pilihan yang baik. Ini boleh menyelesaikan masalah output talian, tetapi oleh kerana projek gabungan hanya perlu menggunakan kunci dan bukan nilai, sayang untuk menggunakanOrderedDict
Namun, pada masa ini tiada pilihanOrderSet
dalam perpustakaan standard, jadi saya kena buat dengannya.Untuk maklumat tentang OrderedDict, sila rujuk OrderedDict
Malah, terdapat perpustakaan pihak ketiga OrderedSet
atau anda boleh melaksanakannya sendiri, sila rujuk OrderedSet (resipi Python)
Akhir sekali, linkse7en mempunyai titik yang sangat baik untuk masalah pemprosesan dokumen seperti ini, jika anda boleh membaca dan menulis pada masa yang sama, membaca dan memproses pada masa yang sama pasti akan menjadi
efisyen (kerana anda hanya perlu memproses dokumen sekali Lawati)() dan討論請見評論部分 moling 大的觀點
menjimatkan sumber (output selesai serta-merta, tidak perlu membazir ruang untuk menyimpan data). Walau bagaimanapun, memandangkan pasangan data pendua mungkin muncul merentas baris , anda masih perlu membelanjakan lebih banyak sumber untuk memastikan kestabilan.Kod (Python3):
Saya juga akan menerangkan bahagian kod (mungkin tulisan saya tidak terbaik, tetapi saya boleh berkongsi beberapa pengalaman).
.
Sebagai pengaturcara Python, kita harus biasa denganslice
jenis jujukan penghirisan.
sebenarnya boleh ditulis sebagai:pasangan data dan data lain menggunakan:
Tetapi cara ini sebenarnya tidak cukup jelas untuk dibaca Kami boleh memberi nama kepada dua julat ini, jadi:dengan cara yang lebih elegan dan mudah dibaca.
items
Yang kedua ialah
, fungsi ini agak praktikal, contohnya:
Jika nilai kuncisetdefault
wujud dalam kamus (atau jenis pemetaan lain yang sepadan), kembalikan
Perkara terakhir yang saya ingin kongsikan ialah pembongkaran tupel bersarang:key
Jika tidak, pulangan akan secara automatik memasukkan pasangan nilai kunci baharudic[key]
dalam kamus dan kembalikan .dic[key] = default_value
default_value
Teknik ini boleh digunakan dengan mudah untuk membongkar tuple bersarang.
Terima kasih semua kerana tidak merungut bahawa saya terlalu banyak bercakap...
Adakah lebih senang menggunakan panda?
Empat baris akan menyelesaikan masalah
Saya menyimpan dokumen sebagai contoh.txt dahulu