簡體   English   中英

Python 3:什么時候使用dict,當元組列表?

[英]Python 3: When to use dict, when list of tuples?

我有id監獄囚犯的S,例如。 每個囚犯都有一個名字。

我知道dictionarys是如何工作的,我知道元組是如何工作的,我知道列表是如何工作的,但有時候我會看到一個字典被使用,有時候會看到一個元組列表。 在我的情況下我應該使用哪一個?

d = {
    1: "Mike",
    2: "Bob",
    3: "Tom"
}

VS

l = [
    (1, "Mike"),
    (2, "Bob"),
    (3, "Tom")
]

並概括了這個問題:我應該何時使用dict,何時使用元組列表,哪一個有什么好處?

在按順序存儲項目時,應使用列表。 在這種情況下,唯一重要的是ID被映射到名稱。

字典是映射,這意味着鍵和值之間的關系不對稱。 例如,通過已知值獲取密鑰是棘手的(並且在一般情況下並不總是可行),而通過任何項的值過濾元組的列表(或者一組)也是同樣容易的。

話雖這么說,在選擇數據結構時,考慮如何從中檢索數據是有意義的。 如果你可以看到idname是類似於C struct的東西的相等部分(例如,你需要通過它們中的任何一個進行搜索等),那么你最好使用元組或collections.namedtuple 您仍然可以將它們放在列表或集合中,具體取決於您是否需要保留它。

但是如果id是一個“特殊”字段,用於檢索有關該對象的其余信息,並且它保證是唯一的(好吧,“ID”表示它),並且您不需要內部訂單,而您想要恆定時間隨機訪問 - 當然使用dict。

它們之間有兩個主要區別:

  • 字典是無序的,元組列表是。 因此,如果訂購很重要,請使用后者。

  • 將鍵映射到值在dict中占用恆定時間,在元組列表中執行相同操作需要線性時間。 因此,鍵值對的數量越大,掃描元組列表以查找匹配所需的時間就越多,而在字典中,查找幾乎是即時的。

    (如果您的元組按排序順序保存,則可以使用二進制搜索將搜索時間縮短為O(log n);但這仍然比字典的常量時間慢。

在大多數情況下,您使用dict 即使需要訂購,您也可以使用collections.OrderedDict來獲得兩全其美。

在你的情況下,我會使用字典。 您可能需要考慮使用一個原因。

  • 字典允許使用其API來操作其中的鍵和值,這需要更多代碼來使用元組列表。

例如,考慮一下:

要使用字典獲取囚犯的姓名,您只需執行以下操作:

d.values()

要使用元組列表執行相同的操作,您需要執行此操作:

names = []
for tup in l:
    names.append(tup[1])
  • 字典值是可變的 ,這意味着可以允許它們被更改。 你不能用元組做同樣的事情 (它是不可變的 )。

例如

d[1] = 'Fotis'

要使用元組列表實現相同的功能,您必須使用新元組替換要操作的元組。

例如

l[1] = (2, 'Max')

暫無
暫無

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

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