2016-03-27 11 views
0
dictionary[pattern_key] = {"key": index_key, "document": index_source, "startPos":index_start, "endPos": index_end} 

Dies ist ein Auszug aus der Liste meiner WörterbücherWie Liste der Wörter Wert sortieren

{ 
'AGACAATCTC': {'startPos': '174', 'document': 'source-document01012.txt', 'endPos': '183', 'key': 'AGACAATCTC'}, 
'GGTCAGACAA': {'startPos': '18', 'document': 'source-document01012.txt', 'endPos': '27', 'key': 'GGTCAGACAA'}, 
'TAGATGAAGT': {'startPos': '102', 'document': 'source-document01012.txt', 'endPos': '111', 'key': 'TAGATGAAGT'} 
} 

Wie kann ich Art, dass durch Dokument und dann durch startPos?

habe ich versucht, so etwas wie dies funktioniert aber nicht

sorted_dict = sorted(dictionary, key=itemgetter(pattern_key[document]))

script.py

#!/usr/bin/env python 
import sys 

dictionary = {}; 

for pattern in sys.stdin: 

    if "," in pattern: 
     pattern_key, pattern_source, pattern_start, pattern_end = pattern.strip().split(",") 
     index_file = open('index.txt', 'r') 

     for line in index_file: 
      if "," in line: 
       index_key, index_source, index_start, index_end = line.strip().split(",") 
       if pattern_key == index_key: 
        dictionary[pattern_key] = {"document": index_source, "startPos":index_start, "endPos": index_end} 

sorted(dictionary.items(), key = lambda x: (x[1]['document'], int(x[1]['startPos']))) 

for k, v in dictionary.items(): 
    print (k, '-->', v) 
+0

Für die Ausgabe möchten Sie die gesamten dict-Werte oder nur die Schlüsselnamen? ['AGACAATCTC', 'TAGATGAAGT'] so? – akash12300

+0

Ich brauche die gesamte Ausgabe nach Dokument sortiert und dann startPos ... –

+0

Sorted aktualisiert das Wörterbuch nicht, um sortierte Werte zu haben. Sie müssen die Liste der (, ) Tupel verwenden, die vom Befehl sorted() zurückgegeben werden. Wenn Sie eine Liste von Tupeln in ein Wörterbuch konvertieren und dann verwenden, kann dies wiederum die sortierte Reihenfolge stören. – akash12300

Antwort

3

Sie die Einträge in der Innen Wörterbuch als Schlüssel für sorted bekommen:

sorted(dictionary.items(), key = lambda x: (x[1]['document'], int(x[1]['startPos']))) 

Ein Tupelschlüssel wird zuerst von der 0. Element, dann 1. und so weiter.

Beachten Sie, dass dies eine Liste von Tupeln erzeugt, wobei jedes Tupel (str, dict) ist.

EDIT:
In Ihrem Kontext, die korrekte Umsetzung ist die folgende:

sorted_values = sorted(dictionary.items(), key = lambda x: (x[1]['document'], int(x[1]['startPos']))) 

for k, v in sorted_values: 
    print (k, '-->', v) 
+0

hmm Dank aber nicht von startPos sortiert bekommt .. –

+0

das Laufen auf Ihren Beispieldaten liefern: '('GGTCAGACAA', { 'Dokument': 'source-document01012.txt', 'endPos': '27', ' startPos ':' 18 ',' Schlüssel ':' GGTCAGACAA '}) (' TAGATGAAGT ', {' Dokument ':' source-document01012.txt ',' endPos ':' 111 ',' startPos ':' 102 ' , 'key': 'TAGATGAAGT'}) ('AGACAATCTC', {'Dokument': 'source-document01012.txt', 'endPos': '183', 'startPos': '174', 'key': ' AGACAATCTC '}) '. Dies ist nach 'document' und' startPos' sortiert. – sdsmith

+0

Können Sie ein Beispiel geben, für welchen Wert es nicht mit 'startPos' sortiert wurde? Weil ich einen ähnlichen Ansatz versucht habe und es für mich funktioniert hat. – akash12300

2

Ihre Make Sortierung auf der Grundlage Ihrer gewünschten Kriterien dann ein neues OrderedDict aus der sortierten Liste erstellen, da dict nicht die Sortierung halten von seiner Natur:

>>> from collections import OrderedDict 
>>> 
>>> d = {'AGACAATCTC': {'endPos': '183', 'document': 'source-document01010.txt', 'key': 'AGACAATCTC', 'startPos': '174'}, 'GGTCAGACAA': {'endPos': '27', 'document': 'source-document01010.txt', 'key': 'GGTCAGACAA', 'startPos': '18'}, 'TAGATGAAGT': {'endPos': '111', 'document': 'source-document01011.txt', 'key': 'TAGATGAAGT', 'startPos': '102'}} 
>>> 
>>> d_ordered = OrderedDict(sorted(d.items(), key=lambda t:(t[1]['document'], int(t[1]['startPos'])))) 
>>> 
>>> d_ordered 
OrderedDict([('GGTCAGACAA', {'endPos': '27', 'document': 'source-document01010.txt', 'key': 'GGTCAGACAA', 'startPos': '18'}), ('AGACAATCTC', {'endPos': '183', 'document': 'source-document01010.txt', 'key': 'AGACAATCTC', 'startPos': '174'}), ('TAGATGAAGT', {'endPos': '111', 'document': 'source-document01011.txt', 'key': 'TAGATGAAGT', 'startPos': '102'})]) 
Verwandte Themen