将numpy数组转换为字典

时间:2017-12-14 12:11:01

标签: python arrays numpy dictionary

我有一个如下数组:

[( 1, b'"C"'), ( 2, b'"C#"'), ( 3, b'"D"'), ( 4, b'"D#"'),
 ( 5, b'"E"'), ( 6, b'"F"'), ( 7, b'"F#"'), ( 8, b'"G"'),
 ( 9, b'"G#"'), (10, b'"A"'), (11, b'"A#"'), (12, b'"B"'))]

我想把它转换成字典“d”,这样当我说的时候 d[11]我会得到"A#"

编辑:了解到dict是一个保留字,所以我将其改为“d”。

4 个答案:

答案 0 :(得分:2)

你好像要求一个dict,其值是一个Unicode字符串。如果是这种情况,那么您需要对其进行解码并删除额外的引号。这样做虽然我的解释器默认使用单引号而不是双引号来回显字符串。

mydict = {k: v.decode().replace('"', "") for k, v in list1}

结果是:

{1: 'C', 2: 'C#', 3: 'D', 4: 'D#', 5: 'E', 6: 'F', 7: 'F#', 8: 'G', 9: 'G#', 10: 'A', 11: 'A#', 12: 'B'}

使用dict理解来循环遍历列表,解码从byte转换为unicode。如果您希望保留内部引号,可以删除替换。

你不想打电话给dict,dict所以我已经使用了mydict。

答案 1 :(得分:1)

试试这个

    numpy_arr = [( 1, b'"C"'), ( 2, b'"C#"'), ( 3, b'"D"'), ( 4, b'"D#"'),
           ( 5, b'"E"'), ( 6, b'"F"'), ( 7, b'"F#"'), ( 8, b'"G"'),
           ( 9, b'"G#"'), (10, b'"A"'), (11, b'"A#"'), (12, b'"B"')
           ]

    dictonry = dict(numpy_arr)
    print(dictonry)
    print(dictonry[11])

答案 2 :(得分:1)

list1 = [( 1, b'"C"'), ( 2, b'"C#"'), ( 3, b'"D"'), ( 4, b'"D#"'),
       ( 5, b'"E"'), ( 6, b'"F"'), ( 7, b'"F#"'), ( 8, b'"G"'),
       ( 9, b'"G#"'), (10, b'"A"'), (11, b'"A#"'), (12, b'"B"')]

dict1 = {a : b for a,b in list1}

print(dict1)
{1: '"C"', 2: '"C#"', 3: '"D"', 4: '"D#"', 5: '"E"', 6: '"F"', 7: '"F#"', 8: '"G"', 9: '"G#"', 10: '"A"', 11: '"A#"', 12: '"B"'}

答案 3 :(得分:0)

一般方法:


>     A = np.random.randint(0,10,(3,3))

([[5, 0, 8],[3, 0, 5],[0, 4, 4]])


>     B = dict(zip(A[:,0],A[:,1:]))

{5: 数组([0, 8]), 3: 数组([0, 5]), 0: 数组([4, 4])}

以第一列为键