2016-08-06 54 views
-2

Ich habe ein Wörterbuch der Zeichenfolge zählt: {"abcd12efgh":1,"abcd23efgh":1,"abcd567efgh":1,"abcdkljefgh":1, "dog":1, "cat":1}wie die ungewöhnlichen Zeichen zwischen zwei Zeichenfolgen mit "x" ersetzen?

Ich brauche zusammen ähnliche Strings Gruppe und aggregieren die Zählungen so etwas wie zu bekommen: {"abcdxxxefgh":4,"dog":1,"cat":1}.

Welche der eleganteste Weg, dies in Python zu tun ist?

+0

Dies hängt wirklich davon ab, wie Sie die Entscheidung treffen, die Wörter als ähnlich genug zu gruppieren zu klassifizieren. Wie du das machst, ergibt für mich keinen Sinn. Würde 'Hund' == 'graben' = 'gruben' in dieser Gruppierungsmethode? – Kosch

+1

Ich denke, du solltest dir darüber Gedanken machen, bevor du dir darüber Gedanken machst, es auf elegante Weise zu tun. – csmckelvey

+0

@Vikas, ich würde mir vorstellen, dass die Leute diese Frage abstimmen, weil es bei Stack Overflow darum geht, spezifischere Fragen zu stellen. Dies scheint eine Möglichkeit zu sein, etwas für sich selbst zu programmieren. –

Antwort

0

Die Antwort hängt davon ab, wie Sie angenommen haben, dass zwei Schlüssel übereinstimmen, Sie können jedoch eine separate Funktion festlegen. Ich habe eine solche geschrieben, nach der Sie suchen könnten: Prüfen Sie, ob der Schlüssel ein bestimmtes Präfix und Suffix hat. Sie können weitere Einschränkungen hinzufügen, z. B. hat die Unterzeichenfolge eine bestimmte Länge oder ein anderes Muster.

def transform(key): 
    prefix, suffix = 'abcd', 'efgh' 
    transformed = key 
    if key.startswith(prefix) and key.endswith(suffix): 
     transformed = prefix + 'X' + suffix 
    return transformed 

new_d = {} 
for k in d: 
    new_d[transform(k)] = new_d.get(transform(k), 0) + d[k] 

#{'abcdXefgh': 4, 'cat': 1, 'dog': 1}