2013-09-01 2 views
0

У меня есть хеш-таблица в python, и у меня много данных, а некоторые из них одинаковые, но мне нужно их связать.Могу ли я кодировать данные таблицы хэша в python

Я хочу создать базу данных музыки, которая, если я найду некоторые числовые значения под названием HZ, могла бы найти название песни.

Так что скажем, у меня есть песня Called Song 1 Я измеряю ее значения HZ, но их бесчисленное количество 10, чтобы быть конкретным.

Что я хочу сделать, так это иметь возможность искать любое значение HZ и иметь тот же результат.

Song 1 
10 HZ 
20 HZ 
30 HZ 
40 HZ 
50 HZ 
60 HZ 
70 HZ 
80 HZ 
90 HZ 
100 HZ 

Так что, если я ввести любой из этих 10 значений я хотел бы получить название песни 1 как результаты

+0

Значение 70 a 10? Вы хотите получить только Песню 1 в результате или хотите, чтобы Song 1 с результатами? – perreal

+0

Если ваши данные большие, вы также можете рассмотреть возможность использования базы данных. Что вы подразумеваете под «их бесчисленными 10, чтобы быть конкретными»? –

ответ

0

Просто используйте встроенный Dict. Это намного эффективнее, чем все, что вы могли бы запрограммировать самостоятельно для большинства случаев использования.

Похоже, что вы хотите просто сохранить название песни в качестве значения для каждого значения герца. Если у вас есть несколько песен, которые содержат герц, вы можете использовать dict, в котором хранятся наборы (или просто defaultdict).

+0

Каков код этого не знакомого – user2693902

+0

http://docs.python.org/2/tutorial/datastructures.html#dictionaries – Antimony

0

Я использовал бы dict с list s как значения для хранения данных. Попробуйте что-то вроде:

music = {10: [<Song 1>, <Song 3>], 
     20: [<Song 1>, <Song 2>] 
     } 

Теперь, чтобы увидеть все песни, которые имеют 10Гц, просто использовать:

music[10] 
0

Введите в словаре («хэш-таблица») все значения HZ в качестве ключей для того же 'Song 1'. Весьма вероятно, что более одной песни будет иметь то же значение HZ, что и в другой песне. В этом случае вы хотели бы сохранить разные композиции, связанные с одной и той же HZ в наборах, поэтому значения вашего словаря - это наборы песен вместо отдельных. Самый простой способ достижения этой цели является:

from collections import defaultdict 
    musicDirectory= defaultdict(set) 

    musicDirectory[ 10].add('Song 1') 
    musicDirectory[ 40].add('Song 1') 
    musicDirectory[ 70].add('Song 1') 
    musicDirectory[100].add('Song 1') 
    musicDirectory[ 10].add('Song 2') 
    musicDirectory[ 70].add('Song 2') 
    musicDirectory[ 50].add('Song 2') 
    musicDirectory[ 10].add('Song 3') 
    musicDirectory[ 50].add('Song 3') 
    musicDirectory[ 70].add('Song 3') 

    print(40,"HZ=",musicDirectory[10]) 
    print(70,"HZ=",musicDirectory[10]) 

Если печать:

40 HZ= {'Song 1'} 
    70 HZ= {'Song 2', 'Song 3', 'Song 1'} 

Потому что есть только одна песня с HZ = 40, но три из них с HZ = 70.

+0

есть недостаток в коде, я заметил, что если число данных равно число HZ равно, результаты, которые выходят, являются ложными, но спасибо, что это именно то, что я искал :) – user2693902

+0

нет никакой проблемы, это идеально подходит для того, что я делаю – user2693902

+0

@ user2693902 Я имел в виду принять ответ, чтобы он не делал Я остаюсь открытым. –

0

Скажем, у меня есть 10 песен, каждая с частотами, но есть только 5 возможных уникальных частот:

In [18]: import numpy as np 

In [19]: from collections import defaultdict 

In [20]: songs = [''.join(np.random.choice(list(letters), size=10).tolist()) for _ in range(10)] 

In [21]: freqs = np.random.choice(range(10, 15), size=10).tolist() 

In [22]: data = defaultdict(list) 

In [23]: for freq, song in zip(freqs, songs): 
    ....:  data[freq].append(song) 
    ....: 

In [24]: dict(data) 
Out[24]: 
{10: ['qlogxhxscp', 'eqxaeiyujp', 'wnhyprymyq', 'snsqquyvmv'], 
11: ['toibbjljxi', 'lqdxucnrpv', 'mrxxwmnxil'], 
13: ['lxcpzbswxx'], 
14: ['gmdbimcwon', 'zafhszrwss']} 

В качестве альтернативы, используйте set вместо list если песня может иметь более чем одну частоту.

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