首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建字典的array.array?

如何创建字典的array.array?
EN

Stack Overflow用户
提问于 2019-02-15 00:34:17
回答 2查看 936关注 0票数 1

什么是字典的类型码'x'

代码语言:javascript
复制
dict_array = array.array('x', [dict1, dict2, dict3])

我不知道该怎么看待'x'。有没有其他方法可以做到这一点,还是不可能?我不想要dicts的list,我想要它们的array

EN

回答 2

Stack Overflow用户

发布于 2019-02-15 01:03:33

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

代码语言:javascript
复制
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)))

输出:

代码语言:javascript
复制
dict_array[0]: <0x00946630> {'key': '1'}
dict_array[1]: <0x00946690> {'key': '2'}
dict_array[2]: <0x00d80660> {'key': '3'}

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

下面是一个这样做的例子:

代码语言:javascript
复制
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]))

输出:

代码语言:javascript
复制
dict_array[0]: {'key': '1'}
dict_array[1]: {'key': '2'}
dict_array[2]: {'key': '3'}
票数 1
EN

Stack Overflow用户

发布于 2019-02-15 00:59:36

正如其他评论所指出的那样,字典将是你最好的选择。您应该首先定义您的单个字典,如下所示:

代码语言:javascript
复制
dict1 = {1 : 'first value', 2 : 'second value'}
dict2 = {1 : 'first value', 2 : 'second value'}
dict3 = {1 : 'first value', 2 : 'second value'}

然后定义一个数组,其中的键是索引:

代码语言:javascript
复制
dict_of_dicts = {1 : dict1, 2 : dict2, 3 : dict3}

注意:索引可以匹配数组表示法,从0开始,如果您选择。

然后,您可以访问字典元素(在打印每个元素的示例中):

代码语言:javascript
复制
#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发布的链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54695036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档