2

わかりましたので、次のような形式の .txt ファイルからテキスト ファイルを読み込みました。

home school 5
home office 10
home store 7
school store 8
office school 4
END OF FILE

次に、それを python で 2 次元のリストに変換すると、次のようになります。

[['home', 'school', '5'], ['home','office','10'],['home','store','7'],
['school','store','8'], ['office','school','4']]

しかし、私が本当に望んでいる方法は、次のような辞書形式にすることです。

{'home': {'school': 5, 'office': 10, 'store': 7},
'school': {'store': 8},
'office': {'school': 4}}

その形式は見栄えがよく、読みやすくなっています。私が持っているデータはもっと詳細ですが、これは単純なバージョンです。次のようにテキストファイルを読みました:

myFileOpen = open(myInputFile, 'r')
myMap = myFileOpen.readlines()[:-1]

#Format the list, each line becomes a list in a greater list
myMap = [i.split('\n')[0] for i in myMap]
myMap = [i.split(' ') for i in myMap]

誰かがこれを説明するのを手伝ってくれるなら、私はとても感謝しています! ありがとうございました!

4

4 に答える 4

2

コードは次のようになります。

result = {}
for item in data:
    result.setdefault(item[0], {}).update({item[1]: item[2]})

コード全体による証明: http://ideone.com/8XUA41

于 2013-07-15T05:41:39.137 に答える
1

中間リストをスキップして、すべてを一度に実行します。

d = {}

with open(myInputFile, 'r') as handle:
    for line in handle:
        if line == 'END OF FILE':
            continue

        key1, key2, value = line.split()

        if key1 not in d:
            d[key1] = {}

        d[key1][key2] = int(value)

その最後の部分をさらに次のように要約できます。

d.setdefault(key1, {})[key2] = int(value)
于 2013-07-15T05:25:42.930 に答える
0

It's messy, but it works with a defaultdict:

>>> from collections import defaultdict
>>> L = [['home', 'school', '5'], ['home', 'office', '10'], ['home', 'store', '7'], ['school', 'store', '8'], ['office', 'school', '4']]
>>> d = defaultdict(list)
>>> for i in L:
...     d[i[0]].append(i[1:])
...
>>> {k: dict(v) for k, v in d.items()} # Or d.iteritems with python 2.x
{'home': {'school': '5', 'store': '7', 'office': '10'}, 'school': {'store': '8'}, 'office': {'school': '4'}}

I'm not that experienced with using defaultdicts, so there's probably a better way.

于 2013-07-15T05:28:04.970 に答える