как связать два словаря для создания нового в Python? [дубликат]

Это ни в коем случае не легкая проблема. Я попытаюсь дать Вам обзор только.

то, Что Вы могли сделать, является чем-то как следующее:

  1. Вычисляют среднюю (среднеквадратичную) громкость сигнала по блокам, скажем, 5 миллисекунд. (Никогда сделав это прежде, я не знаю, каков хороший размер блока был бы.)
  2. Берут преобразование Фурье "заблокированного" сигнала, с помощью Алгоритма бпф.
  3. Находят компонент в преобразованном сигнале, который имеет самую большую величину.

преобразование Фурье А является в основном способом вычислить силу всех частот, существующих в сигнале. Если Вы сделаете это по "заблокированному" сигналу, частота удара, надо надеяться, будет самой сильной.

, Возможно, необходимо применить фильтр сначала, чтобы сфокусироваться на определенных частотах (как бас), которые обычно содержат большую часть информации о BPM.

210
задан vcsjones 17 July 2012 в 09:34
поделиться

3 ответа

d4 = dict(d1.items() + d2.items() + d3.items())

в качестве альтернативы (и предположительно быстрее):

d4 = dict(d1)
d4.update(d2)
d4.update(d3)

Предыдущий вопрос SO, из которого пришли оба этих ответа, находится здесь .

110
ответ дан 23 November 2019 в 04:35
поделиться

Вы можете использовать метод update () для создания новый словарь, содержащий все элементы:

dall = {}
dall.update(d1)
dall.update(d2)
dall.update(d3)

Или в цикле:

dall = {}
for d in [d1, d2, d3]:
  dall.update(d)
57
ответ дан 23 November 2019 в 04:35
поделиться
  1. Самый медленный и не работает в Python3: объедините элементы и вызовите dict в полученном списке:

     $ python -mtimeit - s'd1 = {1: 2,3: 4}; d2 = {5: 6,7: 9}; d3 = {10: 8,13: 22} '\
    'd4 = dict (d1.items () + d2.items () + d3.items ())'
    
    100000 циклов, лучшее из 3: 4,93 мксек на цикл
    
  2. Самый быстрый: полностью использовать конструктор dict , затем одно обновление :

     $ python -mtimeit -s'd1 = {1: 2,3: 4} ; d2 = {5: 6,7: 9}; d3 = {10: 8,13: 22} '\
    'd4 = dict (d1, ** d2); d4.update (d3) '
    
    1000000 циклов, лучшее из 3: 1,88 мксек на цикл
    
  3. Промежуточный результат: цикл update вызывает изначально пустой dict:

     $ python -mtimeit -s'd1 = {1: 2,3: 4}; d2 = {5: 6,7: 9}; d3 = {10: 8,13: 22} '\
    'd4 = {}' 'для d в (d1, d2, d3): d4.update (d)'
    
    100000 циклов, лучшее из 3: 2,67 мксек на цикл
    
  4. Или, что то же самое, один copy-ctor и два обновления:

     $ python -mtimeit -s'd1 = {1: 2,3: 4}; d2 = {5: 6,7: 9}; d3 = {10: 8,13: 22} '\
    'd4 = dict (d1)' 'вместо d в (d2, d3): d4.update (d)'
    
    100000 петель, лучшее из 3: 2,65 мксек на петлю
    

Я рекомендую подход (2) и особенно рекомендую избегать (1) (который также занимает O (N) дополнительной вспомогательной памяти для временной структуры данных конкатенированного списка элементов).

247
ответ дан 23 November 2019 в 04:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: