1

好吧,我有以下字典:

 {'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'
4

1 回答 1

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]如果密钥尚未出现在任一字典中,我将默认值更新为(并使用变量来增加可读性)。请注意,对于列表中的第一项,如果 db_array 中不存在键,我们将回退到 result_array;密钥始终存在于两个字典中的至少一个中,这样您就不会得到空字符串值。

如果键不在result_array字典中,那么您的原始默认值会导致问题,因为您使用 int0然后索引为数组:

>>> result_array.get('foobar', 0)[1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable

(更新以反映您显示原始代码的评论)。

于 2012-05-22T09:33:58.730 回答