4

2列だけの場合は方法を知っていますが、ファイルが次のような場合はどうなりますか:

01 asd 023 green
01 dff 343 blue
02 fdf 342 yellow
02 fff 232 brown
02 kjf 092 green
03 kja 878 blue

そして、列 2 を辞書のキーにし、列 4 をそのキーのコンテンツのキーにしたいですか? 私が考えていたのは、この問題を回避する方法は、他の役に立たない列を完全に削除して、必要な2つだけを残すことです。その後、このWebサイトでも見たスクリプトを使用して辞書を作成できます

Python - ファイルから辞書へ?

もちろん、これは問題を回避する方法です。どんなヒントでも大歓迎です。

4

4 に答える 4

5
d = {}
with open('data.txt') as f:
  for line in f:
    tok = line.split()
    d[tok[1]] = tok[3]
print(d)

これは生成します

{'kja': 'blue', 'kjf': 'green', 'fdf': 'yellow', 'asd': 'green', 'fff': 'brown', 'dff': 'blue'}

split()(引数なしで)行を文字列のリストに分割します。次に、リストインデックスを使用tok[1]、これらのリストの2番目と4番目の値をアドレス指定し、辞書のキーと値に割り当てます()。tok[3]d[key] = value

于 2012-12-06T19:16:47.107 に答える
2

何かのようなもの

from operator import itemgetter
keyval = itemgetter(1, 3)
with open('file') as fin:
    keyvals = (keyval(line.split()) for line in fin)
    my_dict = dict(keyvals)

ノート:

dictこれは、ループの外側で宣言するのではなく、初期化に組み込みを使用するという意味で @NPE の回答とは異なります。またitemgetter、各行から 2 番目と 4 番目の値を取得し (スペースで分割した場合)、ジェネレーター式を使用してそれをファイルの各行に適用するキー検索関数としても使用します。

失敗するはずのわずかな利点もありますが (ただし、通常はそれほど重要ではありませmy_dict = dict(keyvals)ん)、名前がバインドされることはありませんが、キーごとにキーを割り当てることによって何かが発生した場合dict、ステートメントの外側で宣言されたものがwith「ダーティ」になる可能性があります。

于 2012-12-06T19:17:26.247 に答える
0
d = {}
with open("file.txt") as f:
    for line in f:
        (key1, val1, key2, val2) = line.split()
        d[int(key1)] = val
        d[int(key2)] = val2

それらのすべてを取得します。それ以外の場合は、NPEの方針に沿って何かを行うことができます。

于 2012-12-06T19:16:36.250 に答える
0
for line in f.readlines():
    my_dic[line.split(' ')[1]] = line.split(' ')[3]
于 2012-12-06T19:17:14.423 に答える