在dict中附加列表的最佳方法是什么?

2024-10-01 00:31:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试建立一个列表,其中有一个键指向多个值。我认为最好的方法是将键值指向列表。然而,我在构建dict中的列表时遇到了问题

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

except 40_590 0
except 40_554 1
except 40_592 2
else 40_590 [0] 3
except 1_122 4
except 40_577 5
else 40_590 None 6

根据上述测试结果,第三次按“40_”键时,该值被清除。你知道吗


Tags: 列表dataitemsvalelsenumdictlist
2条回答
busdict[bus] = [val].append(i)

list.append是一个就地操作,返回None。因此,您正在清除其中先前存储的列表。你可以这样修

busdict[bus].append(i)

但是解决这个问题的最佳方法是使用^{}函数(如果找不到指定的键,它将赋值并返回默认值),如下所示

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

但是解决这个问题的最好方法是使用^{},就像这样

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))

顺便说一下:use four spaces for indents!你知道吗

相关问题 更多 >