如何创建字典的array.array?

时间:2019-02-14 16:34:17

标签: python arrays dictionary

词典的类型代码'x'是什么?

dict_array = array.array('x', [dict1, dict2, dict3])

我不知道该放在'x'的什么地方。还有另一种方法可以完成还是不可能?我不需要listdict,我想要其中array

2 个答案:

答案 0 :(得分:1)

hack(仅适用于CPython)是将指针存储到array中的每个字典中:

import array
import _ctypes


def di(obj_id):
    """ Reverse of id() function. """
    # from https://stackoverflow.com/a/15012814/355230
    return _ctypes.PyObj_FromPtr(obj_id)


dict1 = {'key': '1'}
dict2 = {'key': '2'}
dict3 = {'key': '3'}

dict_array = array.array('q', map(id, [dict1, dict2, dict3]))

for i, ptr in enumerate(dict_array):
    print('dict_array[{}]: <0x{:08x}> {!r}'.format(i, ptr, di(ptr)))

输出:

dict_array[0]: <0x00946630> {'key': '1'}
dict_array[1]: <0x00946690> {'key': '2'}
dict_array[2]: <0x00d80660> {'key': '3'}

但是 @tobias_k建议使用整数字典键而不是内存指针的一种更简单,更好的(IMO)方法。

这是这样做的一个例子:

import array

dicts = {
    0: {'key': '1'},
    1: {'key': '2'},
    2: {'key': '3'},
}

dict_array = array.array('L', dicts.keys())

for i, key in enumerate(dict_array):
    print('dict_array[{}]: {!r}'.format(i, dicts[key]))

输出:

dict_array[0]: {'key': '1'}
dict_array[1]: {'key': '2'}
dict_array[2]: {'key': '3'}

答案 1 :(得分:0)

正如其他评论所指出的那样,词典词典将是您最好的选择。首先,您应按以下方式定义各个词典:

dict1 = {1 : 'first value', 2 : 'second value'}
dict2 = {1 : 'first value', 2 : 'second value'}
dict3 = {1 : 'first value', 2 : 'second value'}

然后定义一个键为索引的数组:

dict_of_dicts = {1 : dict1, 2 : dict2, 3 : dict3}

注意:如果选择的话,索引可以匹配从0开始的数组符号。

然后,您可以这样访问字典元素(例如,打印每个元素):

#This will neatly print out each dictionary, and its' elements, inserting a newline after each element has been printed.
for key, value in dict_of_dicts.items():
    print('{} = {'.format(key), end='')
    for i in value:
        print(i, end='')
    print('}')

如果您不需要列表,这可能是您的最佳选择。但是,如果由于某种原因它确实确实需要一堆字典,请访问发布的链接@meowgoesthedog。