2012-05-22 2 views
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' 
+2

Каков ожидаемый выход? –

+1

Являются ли 'db_array' и' db_array' два разных словаря? –

+0

Я ставлю их дважды, например ... Это исходный код: result_array = {k: db_array.get (k, 0) + result_array.get (k, 0) для k в наборе (db_array) | set (result_array)} – badc0re

ответ

3

Включите db_array [к] [ 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. Обратите внимание, что для первого элемента в списке мы возвращаемся к result_array, если ключ отсутствует в db_array; ключ всегда присутствует, по крайней мере, в одном из двух dicts, таким образом, вы не получаете пустые значения строк.

Если ключ не были в result_array Словаре, то оригинал по умолчанию будет вызывать проблемы, как вы используете 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 

(Обновлено, чтобы отразить свой комментарий с указанием вашего оригинальный код).

+0

также может случиться так, что количество ключей (элементов) в db_array не совпадает с элементами result_array. – badc0re

+0

'set (db_array) | set (result_array) 'означает взять * все * ключи из обоих dicts и объединить их в один набор, объединение ключей. Вы говорите, что в 'result_array' могут быть ключи, которые не находятся в db_array? –

+0

Да, это так, может быть случай, когда в одном из массивов не будет ключа, поэтому мне нужно объединить его в один массив. – badc0re

Смежные вопросы