簡體   English   中英

反轉從文本文件讀取的字典的鍵值-python

[英]Reversing key-values for dictionary read from textfile - python

我有一本以前輸出到文本文件中的字典,即[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列是值:

[OUT]:

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 ,通過getkeybyvalue()函數將返回['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']

作為對示例的回應,您可以使用列表推導來獲得技術上更緊湊的代碼。 我認為它們在這里並沒有增加多少(盡管如果我們對它們進行分析,它們對於大型數據集可能會更有效)。

它們確實使代碼更難閱讀,因此在大多數情況下,我真的不喜歡這種方法。

如果您覺得自己的解決方案很復雜,並且可以控制持久性代碼,請以標准格式存儲數據。

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, milk, whatever\tfood"""

columns = [line.strip().split('\t') for line in dict_from_file.split('\n')]
for c1, c2, c3 in columns:
    for c3_item in c3.split(','):
        outdict[c3_item.strip(', ')] += [c1] + [c.strip(' ,') for c in c2.split(',')]

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

print(getkeybyvalue(outdict, 'foo foo'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM