我试图遍历字典列表,并仅将具有年份值的字典保留在其yearID
键中。本质上,列表(statistics
)是棒球统计数据,每一行(词典)都是一年中球员的统计数据。
此代码似乎很好用(对于很小的词典列表),但是一旦列表的大小超过40或50,Thonny就会崩溃:
def filter_by_year(statistics, year, yearid):
nlist = []
for dicts in statistics:
if str(dicts[yearid]) == str(year):
nlist.append(dicts)
return nlist
答案 0 :(得分:1)
我不知道它是否更有效,但是列表理解是更简洁的代码:
return [dicts for dicts in statistics if str(dicts[yearid]) == str(year)]
答案 1 :(得分:1)
取决于您所说的“有效”。您的代码对于大量词典应该可以正常工作,所以我认为您的意思是编写代码很有效。
在这种情况下,nlist
可以简化为简单的列表理解:
[dicts for dicts in statistics if str(dicts[yearid]) == str(year)]
答案 2 :(得分:1)
到目前为止介绍的所有方法中(由 prashant rana , Zaid Afzal , alec_a 和 Steven Burnap >),您的-原始的-效率最高。如果您消除了不必要的字符串转换,则速度会提高 3倍:
def filter_by_year(statistics, year, yearid):
nlist = []
for dicts in statistics:
if dicts[yearid] == year:
nlist.append(dicts)
return nlist
答案 3 :(得分:0)
filter
也是一个好方法
def filter_by_year(statistics, year, yearid):
nlist = list(filter (lambda dicts: str(dicts[yearid]) == str(year), statistics))
return nlist
答案 4 :(得分:0)
您可以使用生成器仅获取年份并保持字典索引的迭代。
def filter_by_year(statistics, year, yearid):
nlist = []
for i, yearid_ in enumerate(dict[yearid] for dict in statistics):
if str(yearid_) == str(year):
nlist.append(statistics[i])
return nlist