2 Stimmen

Python: Speichern eines Listenwerts in Verbindung mit einem Schlüssel in einem Wörterbuch

Ich weiß, wie Python-Dictionaries Schlüssel:Wert-Tupel speichern. In dem Projekt, an dem ich arbeite, bin ich erforderlich, um Schlüssel zu speichern, die mit einem Wert, der eine Liste ist. ex: Schlüssel -> [0,2,4,5,8] wo, Schlüssel ist ein Wort aus einer Textdatei der Listenwert enthält Ints, die für die DocIDs stehen, in denen das Wort vorkommt.

Sobald ich das gleiche Wort in einem anderen Dokument finde, muss ich diese DocID an die Liste anhängen.

Wie kann ich das erreichen?

8voto

Vinko Vrsalovic Punkte 252104

Sie können defauldict wie folgt verwenden:

>>> import collections
>>> d = collections.defaultdict(list)
>>> d['foo'].append(9)
>>> d
defaultdict(<type 'list'>, {'foo': [9]})
>>> d['foo'].append(90)
>>> d
defaultdict(<type 'list'>, {'foo': [9, 90]})
>>> d['bar'].append(5)
>>> d
defaultdict(<type 'list'>, {'foo': [9, 90], 'bar': [5]})

2voto

cobbal Punkte 68319

Dies wäre ein guter Ort für die Verwendung defaultdict

from collections import defaultdict

docWords = defaultdict(set)
for docID in allTheDocIDs:
    for word in wordsOfDoc(docID):
        docWords[word].add(docID)

Sie können eine Liste anstelle einer Menge verwenden, wenn Sie das müssen.

1voto

David McCoy Punkte 81

Dieser Beitrag war für mich hilfreich, um ein Problem zu lösen, das ich bei der dynamischen Erstellung von variablen Schlüsseln mit angehängten Datenlisten hatte. Siehe unten:

import collections

d = collections.defaultdict(list)
b = collections.defaultdict(list)
data_tables = ['nodule_data_4mm_or_less_counts','nodule_data_4to6mm_counts','nodule_data_6to8mm_counts','nodule_data_8mm_or_greater_counts']

for i in data_tables:
    data_graph = con.execute("""SELECT ACC_Count, COUNT(Accession) AS count
                                            FROM %s
                                            GROUP BY ACC_Count"""%i)
    rows = data_graph.fetchall()
    for row in rows:
        d[i].append(row[0])
        b[i].append(row[1])

print d['nodule_data_4mm_or_less_counts']
print b['nodule_data_4mm_or_less_counts']

Diese gibt die Datenlisten für jeden Schlüssel aus und kann dann in ein np.array zum Plotten usw. umgewandelt werden.

>>>[4201, 1052, 418, 196, 108, 46, 23, 12, 11, 8, 7, 2, 1]
>>>[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16]

0voto

Falmarri Punkte 46357

So etwas wie das hier?

word = 'something'
l = [0,2,4,5,8]
myDict = {}
myDict[word] = l

#Parse some more

myDict[word].append(DocID)

0voto

Björn Pollex Punkte 72424

Ich habe einmal eine Hilfsklasse geschrieben, um @Vinko Vrsalovic`s Antwort einfacher zu bedienen:

class listdict(defaultdict):
    def __init__(self):
        defaultdict.__init__(self, list)

    def update(self, E=None, **F):
        if not E is None:
            try:
                for k in E.keys():
                    self[k].append(E[k])
            except AttributeError:
                for (k, v) in E:
                    self[k].append(v)
        for k in F:
            self[k].append(F[k])

Dies kann wie folgt verwendet werden:

>>> foo = listdict()
>>> foo[1]
[]
>>> foo.update([(1, "a"), (1, "b"), (2, "a")])
>>> foo
defaultdict(<type 'list'>, {1: ['a', 'b'], 2: ['a']})

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X