0

以前にテキストファイルに出力された辞書があります。つまり、[in]:

dict_from_file = """foo\tfoobar, bar, foo foo\tFoo bar language, computing\nprog\t python, java, c, c++\t computing\nedibles\tcereal, milka, whatever\tfood"""

もともと、キーは列 1 で、エイリアスは列 2 にあり、列 3 は値です。最後の列がキーで、1 番目と 2 番目の列が値になるようにテキストファイルを変換する必要があります。

[アウト]:

Foo bar language\tfoobar, foo, bar, foo foo
computing\tfoobar, foo, bar, foo foo, python, java, c, c++, prog
food\tcereal, milka, whatever\tedibles

これを行う目的は、与えられた入力foo fooを by getkeybyvalue()function が返すようにすること['Foo bar language','computing']です。

私は以下のようにそれをドンしてきました:

from collections import defaultdict

outdict = defaultdict(list)
def getkeybyvalue(dictionary, value):
  return [i for i,j in dictionary.items() if value in j]

dict_from_file = """foo\tfoobar, bar, foo foo\tFoo bar language, computing\nprog\t python, java, c, c++\t computing\nedibles\tcereal, milka, whatever\tfood"""

for line in dict_from_file.split('\n'):
    column1, column2, column3 = line.strip().split('\t')
    #print column1, column2, column3
    for c3 in column3.split(','):
        c3 = c3.strip(', ')
        outdict[c3].append(column1)
        for c2 in column2.split(','):
            outdict[c3].append(c2.strip(' ,'))

for k in outdict:
    print k, outdict[k]

print getkeybyvalue(outdict, 'foo foo')
  1. これを行うためのより冗長な方法はありますか?
  2. foo foo私のpython辞書が返すようなテキストファイルを他にどのように読むべき['Foo bar language','computing']ですか?
4

1 に答える 1