![]() |
果断的莴苣 · 利用QDir实现删除选定文件目录下的空文件夹 ...· 1 年前 · |
![]() |
鬼畜的柚子 · 安装DeepStream - nanmi ...· 1 年前 · |
![]() |
不要命的西装 · vscode 前进后退快捷键-掘金· 1 年前 · |
![]() |
小胡子的小虾米 · C++如何快速初始化std::array数组 ...· 1 年前 · |
![]() |
犯傻的小笼包 · Vue3 + Vite +TS ...· 1 年前 · |
我是python的新手,我有一个年份和每一年的值的列表。我要做的是检查年份是否已经存在于字典中,如果存在,则将该值附加到特定键的值列表中。
例如,我有一个年份列表,每个年份都有一个值:
2010
7
我想做的是用年份作为关键字,用那些个位数作为值来填充字典。但是,如果我有两次列出2009,我希望将第二个值附加到该字典中的值列表中,因此我希望:
2010: 2
2009: 4, 7
1989: 8
现在,我有以下几点:
d = dict()
years = []
(get 2 column list of years and values)
for line in list:
year = line[0]
value = line[1]
for line in list:
if year in d.keys():
d[value].append(value)
else:
d[value] = value
d[year] = year
发布于 2010-07-08 06:00:53
如果我可以重新表述您的问题,您需要的是一个以年份为关键字的字典,以及一个包含与该年关联的值列表的每个年份的数组,对吧?我是这样做的:
years_dict = dict()
for line in list:
if line[0] in years_dict:
# append the new number to the existing array at this slot
years_dict[line[0]].append(line[1])
else:
# create a new array in this slot
years_dict[line[0]] = [line[1]]
在years_dict中,您最终应该得到一个如下所示的字典:
{
"2010": [2],
"2009": [4,7],
"1989": [8]
}
通常,创建“并行数组”是一种糟糕的编程实践,在这种情况下,项通过具有相同的索引而不是包含它们的容器的适当子项来隐式地相互关联。
发布于 2010-07-08 05:53:57
最好使用
collections.defaultdict
(在Python2.5中添加)。这允许您指定缺失键的默认对象类型(例如
list
)。
因此,不是先创建一个不存在的键,然后附加到键的值,而是去掉中间人,直接附加到不存在的键,以获得所需的结果。
使用您的数据的一个快速示例:
>>> from collections import defaultdict
>>> data = [(2010, 2), (2009, 4), (1989, 8), (2009, 7)]
>>> d = defaultdict(list)
defaultdict(<type 'list'>, {})