我有以下词典:
{'3d1011c0bade5f0a064f7daeef09e7acf900cfe8af09e025859b3426': ['mils news 02122002_0005.txt', 1] }
哪里
['mils news 02122002_0005.txt', 1]
是一个列表。现在我有以下内容:
result_array = {k: db_array.get(k, 0)[1] + db_array.get(k, 0)[1] for k in set(db_array) | set(db_array)}
有了这个,我想用另一个字典对列表中的数字求和。所以我的问题是如何保持字典不变,因为我得到以下内容:
{'3d1011c0bade5f0a064f7daeef09e7acf900cfe8af09e025859b3426': 2}
结果。
预期产出:
{'3d1011c0bade5f0a064f7daeef09e7acf900cfe8af09e025859b3426': ['mils news 02122002_0005.txt', 2] }
根据用户的第一个答案,解决方案的tnx,但我得到以下不同的键:
db_array = {'a': ['mils news 02122002_0005.txt', 3]}
>>> result_array = {'b': ['mils news 02122002_0005.txt', 3]}
>>> result_array = {k: [db_array[k][0],db_array[k][1] + result_array.get(k, ['', 0])[1]] for k in set(db_array) | set(result_array)}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <dictcomp>
KeyError: 'b'
答案 0 :(得分:3)
在dict生成器表达式中包含db_array [k] [0]值:
dv = ['', 0]
result_array = {k: [
db_array.get(k, result_array.get(k))[0],
db_array.get(k, dv)[1] + result_array.get(k, dv)[1]
] for k in set(db_array) | set(result_array)}
请注意,我将默认值更新为['', 0]
(并使用一个变量来提高可读性),如果该密钥在任一dict中都不存在。请注意,对于列表中的第一项,如果db_array中不存在该键,则返回result_array;密钥始终存在于两个dicts中的至少一个中,这样就不会得到空字符串值。
如果密钥不在result_array
dict中,那么您的原始默认值会导致问题,因为您使用int 0
然后索引为数组:
>>> result_array.get('foobar', 0)[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable
(已更新以反映显示原始代码的评论)。