0

私はPythonでハッシュテーブルを持っていて、たくさんのデータを持っていて、いくつかは同じですが、それらを連鎖させる必要があります.

HZと呼ばれる数値を検索すると、曲の名前を見つけることができる音楽データベースを作成したいと考えています。

たとえば、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 個の値のいずれかを入力すると、結果として Song 1 という名前が得られます

4

4 に答える 4

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']}

または、曲に複数の周波数がある場合は、a のset代わりに a を使用します。list

于 2013-09-01T04:15:46.567 に答える
0

組み込みのdictを使用するだけです。ほとんどのユースケースで自分でコーディングできるものよりもはるかに効率的です。

ヘルツ値ごとに曲名を値として保存するだけでよいようです。ヘルツを共有する複数の曲がある場合は、セットを格納する dict (または単に defaultdict) を使用できます。

于 2013-09-01T03:18:20.977 に答える
0

データを格納する値として s を使用しdictます。list次のようなものを試してください:

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

10HZ のすべての曲を表示するには、次のようにします。

music[10]
于 2013-09-01T03:18:51.107 に答える
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の曲は1曲しかないのに、HZ=70の曲は3曲あるからです。

于 2013-09-01T03:21:10.630 に答える