我可以在python中链接哈希表数据

时间:2013-09-01 03:14:35

标签: python hashtable chaining

我在python中有一个哈希表,我有很多数据,有些是相同的,但我需要链接它们。

我想建立一个音乐数据库,如果我搜索一些名为HZ的数值,我就可以找到这首歌的名字。

所以,让我说我有一首歌叫做歌曲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 个答案:

答案 0 :(得分:0)

只需使用内置字典。它比你在大多数用例中编写代码的效率要高得多。

听起来你想要的只是将歌曲名称存储为每个赫兹值的值。如果你有多首共享赫兹的歌曲,你可以使用一个存储集合的dict(或者只是一个默认的dict)。

答案 1 :(得分:0)

我会使用dict list作为值来存储数据。尝试类似:

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

现在要查看所有拥有10HZ的歌曲,只需使用:

music[10]

答案 2 :(得分: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。

答案 3 :(得分: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