0

.txt ファイルからディクショナリに値をインポートしようとしています。コードを以下に示します。

def displayInventory():

 Inventory = {}    

    _openfile = open('database.txt','r+',)
    _readfile = _openfile.read()
    _readfile = _readfile.replace('$'," ")

    print _readfile 

    _splitline =  _readfile.split("\n")     

    for line in _splitline:
        _line = line.split()
        Inventory[_line[0]+","+_line[1]] = _line[2:]    

    print Inventory

さまざまな値を辞書にインポートすることはできますが、私が直面している問題はこれです。テキスト ファイルには、最終的に同じキーを持つ特定の値があります。ディクショナリに追加されるテキスト ファイルの値は、以下に示すように、ディクショナリ内のキーの現在の値を上書きします。

database.txt の値

Shakespeare William Romeo And Juliet 5 5.99
Shakespeare William Macbeth 3 7.99
Dickens Charles Hard Times 7 27.00
Austin Jane Sense And Sensibility 2 4.95
Dickens Charles David Copperfield 4 26.00
Austin Jane Emma 3 5.95
Hawthrone Nathaniel The Scarlet Letter 6 18.00
Shakespeare William Hamlet 10 6.99
Chaucer Geoffrey The Canterbury Tales 4 20.00
Dickens Charles Great Expectations 2 25.00

インベントリ ディクショナリのキーと値

{'Hawthrone,Nathaniel': ['The', 'Scarlet', 'Letter', '6', '18.00'], 
 'Chaucer,Geoffrey': ['The', 'Canterbury', 'Tales', '4', '20.00'], 
 'Dickens,Charles': ['Great', 'Expectations', '2', '25.00'], 
 'Shakespeare,William': ['Hamlet', '10', '6.99'], 
 'Austin,Jane': ['Emma', '3', '5.95']}

シェイクスピア、ウィリアムなどの単一のキーが彼が書いた本のすべての値を持つように、コードを書き直すにはどうすればよいでしょうか。長い質問をお詫びします。どんなアドバイスでも大歓迎です。

4

2 に答える 2

1

dict を変更してリストを保存し、特定の著者名の値を追加し続けるだけです。

for line in _splitline:
    _line = line.split()
    Inventory.setdefault(_line[0]+","+_line[1], [])
    Inventory[_line[0]+","+_line[1]].append(_line[2:])
于 2013-11-08T06:16:25.613 に答える
0

if 句を追加して、キーが既に存在するかどうかを確認する必要があります。存在する場合は、置き換えるのではなく、辞書の値をインクリメントします。

key = _line[0]+","+_line[1]
if key in Inventory:
    Inventory[key] = += _line[2:]
else:
    Inventory[key] = _line[2:]
于 2013-11-08T06:23:38.850 に答える