如何创建数组.array字典的数量?

2024-03-28 17:05:17 发布

您现在位置:Python中文网/ 问答频道 /正文

字典的类型码是什么?你知道吗

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

我不知道在'x'该放什么。有没有其他方法可以做到或不可能?我不想要一个listdict,我想要一个array。你知道吗


Tags: 方法类型字典arraydictlistdict1dict2
2条回答

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

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 posted链接。你知道吗

一个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'}

相关问题 更多 >