簡體   English   中英

搜索列表字典的 Pythonic 方式?

[英]Pythonic way of searching a dict of lists?

出於各種原因,我喜歡使用“列表字典”結構來組織 Python 中的數據,但是,我發現的一個缺點是執行查找可能很煩人。

舉一個例子,數據是 NCAA 錦標賽決賽的歷史——它會是這樣的:

    data = {'year': ['2019','2018',...],'winner': ['Virginia','Villanova',...], 'score':[]...etc}

現在假設我想查找 UConn 贏得的所有年份的數據,到目前為止我這樣做的方式是:

    columns = ['year','winner','coach','score','runner_up'] 
    new_dict = {i: [] for i in columns}                      #redefine blank dict
    for i in range(0,len(old_dict['year']),1):               #go through range
        for j in columns:                                    #go through columns
            if old_dict['winner'][i]=='Connecticut':
                new_dict[j].append(old_dict[j][i])           #append chosen data to new dict

    ....new_dict = {'year': ['2014','2011',...],'winner': ['Connecticut','Connecticut',...]..etc}

有什么辦法可以做得更好嗎? 感覺有點麻煩和丑陋。 我已經嘗試過列表/字典理解的東西,但我很掙扎。 由於這種情況在我做的項目中很少出現,所以我更願意使用通用的 Python 並且我不確定像 Pandas/Numpy 這樣更適合這項工作的東西是否值得。

謝謝!

您正在編寫的代碼很糟糕地重新創建了一個關系數據庫。

如果您打算僅按照一種模式訪問數據,請使用支持該訪問模式的嵌套數據結構。 對於兩種訪問模式,要么轉換您的數據結構,要么使用包裝器和邏輯維護兩個嵌套數據結構以保持它們同步。 當您達到 3 種或更多訪問模式時,請使用關系數據庫。

如果你想保持它的輕量級,只需db = sqlite3.connect("file::memory:?cache=shared")在 memory SQLite 中創建一個數據庫,然后使用它。

暫無
暫無

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

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