文档内容如下:
(数据对) (信息)
----------------- ------------------------
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
....
小白,不懂怎么做,只能想到用字典,好像又行不通,求各位大神帮忙
Si vous souhaitez conserver l'ordre de sortie, vous devez utiliser
.OrderedDict
. La clé utiliseOrderedDict
pour maintenir l'ordre. Les informations suivantes utilisentlist
pour maintenir l'ordre. être gâché, utilisezset
pour maintenir l'ordre Bon choixExpliquez toutes les considérations pour ce code.
La première est la commande. La commande ici comporte deux parties, l'une est l'ordre des lignes de sortie et l'autre est l'ordre après la fusion des éléments. Nous avons observé :
devient :
L'ordre des lignes de sortie est à prendre en compte : pr333 vient avant pr33w
L'ordre après fusion des projets doit être pris en compte : thisisa vient avant la phrase
Cela signifie que le type de données que nous utilisons doit pouvoir maintenir la commande
La seconde est la rapidité. Nous savons tous que le type séquence est une recherche linéaire Pour plus d'efficacité, il est préférable d'utiliser le type mappage.
Après trois considérations, comme l'a dit moling3650,
OrderedDict
est un bon choix. Cela peut résoudre le problème de la sortie de ligne, mais comme le projet de fusion n'a besoin d'utiliser que la clé et non la valeur, il est dommage d'utiliserOrderedDict
. Cependant, il n'y a actuellement aucune optionOrderSet
dans la bibliothèque standard, donc je dois me contenter.Pour plus d'informations sur OrderedDict, veuillez vous référer à OrderedDict
En fait, il existe une bibliothèque tierce OrderedSet
ou vous pouvez l'implémenter vous-même, veuillez vous référer à OrderedSet (recette Python)
Enfin, linkse7en a un très bon point. Pour ce genre de problème de traitement de documents, si vous savez lire et écrire en même temps, la lecture et le traitement en même temps seront certainement
efficaces (car vous n'avez besoin de traiter le document qu'une seule visite)() et討論請見評論部分 moling 大的觀點
économiser des ressources (la sortie est terminée immédiatement, pas besoin de perdre de l'espace pour stocker les données). Cependant, étant donné que des paires de données en double peuvent apparaître sur les lignes , il est toujours nécessaire de dépenser plus de ressources pour assurer la stabilité.Code (Python3) :
J'expliquerai également la partie code (peut-être que mon écriture n'est pas la meilleure, mais je peux partager quelques expériences).
classe.
En tant que programmeur Python, nous devrions être familiers avec leslice
type de séquence le découpage.
peut en fait s'écrire ainsi :paire de données et les autres données.
Mais cette méthode n'est en fait pas assez claire pour être lue. Nous pouvons donner un nom à ces deux plages, donc :d'une manière plus élégante et plus lisible.
items
La seconde est
, cette fonction est assez pratique, par exemple :
Si la valeur clésetdefault
existe dans le dictionnaire (ou autre type de mappage correspondant), retournez
La dernière chose que je veux partager est le démontage des tuples imbriqués :key
Sinon, le retour insérera automatiquement une nouvelle paire clé-valeurdic[key]
dans le dictionnaire et renverra .dic[key] = default_value
default_value
Cette technique peut être facilement utilisée pour démanteler des tuples imbriqués.
Merci à tous de ne pas vous plaindre du fait que je parle trop...
Est-il plus pratique d'utiliser des pandas ?
Quatre lignes résoudront le problème
J'ai d'abord enregistré le document sous le format example.txt