簡體   English   中英

在字典中追加列表的最佳方法是什么?

[英]What is the best way to append lists inside a dict?

我試圖建立一個列表,其中包含許多值的1個鍵。 我認為做到這一點的最佳方法是將鍵值指向列表。 但是,我在構建字典內部的列表時遇到了麻煩。

num_items = len(decoded_data['data']['arrivalsAndDepartures'])
buses = list()
busdict = dict()
val = list() 
for i in range(num_items):
  decoded_data['data']['arrivalsAndDepartures']
  bus = decoded_data['data']['arrivalsAndDepartures'][i]['routeId']
   buses.append(bus)
   try:
     busdict[bus]
   except KeyError:
    busdict[bus] = [i]
    print("except "+  bus , str(i))
   else:
    val = busdict[bus]
    busdict[bus] = [val].append(i)
    print("else "+ bus ,val, str(i))

這給了我奇怪的結果。

$ python test.py

除了40_590 0
40_554 1除外
40_592 2除外
否則40_590 [0] 3
1_122 4除外
40_577 5除外
否則40_590無6

從上面的測試結果中,它第三次按下鍵“ 40_590”時,該值被清除。

busdict[bus] = [val].append(i)

list.append是一個就地操作,返回None 因此,您正在清除其中先前存儲的列表。 你可以這樣解決

busdict[bus].append(i)

但是,解決此問題的最佳方法是使用dict.setdefault函數(如果未找到指定的鍵,則該函數將分配並返回默認值),就像這樣

busdict.setdefault(bus, []).append(i)

但是解決此問題的最佳方法是使用collections.defaultdict這樣的

from collections import defaultdict
busdict = defaultdict(list)
...
...
busdict[bus].append(i)

list.append()不返回值。 像這樣使用它:

   else:
    val = busdict[bus].append(i)
    print("else "+ bus ,val, str(i))

順便說一句: 縮進使用四個空格

暫無
暫無

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

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