[英]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.