Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多维列表/目录/什么的?_Python_List_Dictionary_Multidimensional Array_Arraylist - Fatal编程技术网

Python 多维列表/目录/什么的?

Python 多维列表/目录/什么的?,python,list,dictionary,multidimensional-array,arraylist,Python,List,Dictionary,Multidimensional Array,Arraylist,我想在Python中创建一个多维数组,以便稍后对其进行解析。我是PHP的切换者,所以对于如何创建dict、list或其他任何东西以这种方式获取数据,我有点困惑。有人有主意吗 for group, value in data: print '%s = %s' % (group, value) for member, value in group: print ' MEMBER: %s = %s' % (member, value) >> 'Wind

我想在Python中创建一个多维数组,以便稍后对其进行解析。我是PHP的切换者,所以对于如何创建dict、list或其他任何东西以这种方式获取数据,我有点困惑。有人有主意吗

for group, value in data:
    print '%s = %s' % (group, value)
    for member, value in group:
        print '   MEMBER: %s = %s' % (member, value)

>> 'Windows = 12%'
>> '   MEMBER: pc1 = 123'
>> '   MEMBER: pc2 = 321'
>> 'MacOS = 11%'
>> 'Linux = 13%'
>> '   MEMBER: pc3 = 213'
>> '   MEMBER: pc4 = 132'
>> ...

您可以创建一个递归列表或dict来实现它,我更喜欢dict,因为您可以命名变量,例如

mydata = [
    {
        'name': 'Windows',
        'value': '12%',
        'members': [
            {
                'name': 'pc1',
                'value': 123,
                'members': []
            },
            {
                'name': 'pc2',
                'value': 321,
                'members': []
            },
        ]
    },
    {
        'name': 'Linux',
        'value': '11%',
        'members': [
            {
                'name': 'pc3',
                'value': 213,
                'members': []
            },
            {
                'name': 'pc4',
                'value': 132,
                'members': []
            },
        ]
    },
]
现在,如果您知道您的数据结构只有1层深,您可以像这样迭代它

for topmember in mydata:
    print "%s = %s"%(topmember['name'], topmember['value'])
    for member in topmember['members']:
        print '   MEMBER: %s = %s' % (member['name'], member['value'])
输出:

Windows = 12%
   MEMBER: pc1 = 123
   MEMBER: pc2 = 321
Linux = 11%
   MEMBER: pc3 = 213
   MEMBER: pc4 = 132
Windows = 12%
    pc1 = 123
    pc2 = 321
Linux = 11%
    pc3 = 213
    pc4 = 132
但如果您不知道它有多深,例如,成员可以进一步拥有更多的成员,而这些成员又有更多的成员等等,那么您可以递归地遍历它,例如

def print_recursive(members, indent=''):
    for member in members:
        print "%s%s = %s"%(indent, member['name'], member['value'])
        print_recursive(member['members'], indent + '    ')

print_recursive(mydata)
输出:

Windows = 12%
   MEMBER: pc1 = 123
   MEMBER: pc2 = 321
Linux = 11%
   MEMBER: pc3 = 213
   MEMBER: pc4 = 132
Windows = 12%
    pc1 = 123
    pc2 = 321
Linux = 11%
    pc3 = 213
    pc4 = 132

您可以创建一个递归列表或dict来实现它,我更喜欢dict,因为您可以命名变量,例如

mydata = [
    {
        'name': 'Windows',
        'value': '12%',
        'members': [
            {
                'name': 'pc1',
                'value': 123,
                'members': []
            },
            {
                'name': 'pc2',
                'value': 321,
                'members': []
            },
        ]
    },
    {
        'name': 'Linux',
        'value': '11%',
        'members': [
            {
                'name': 'pc3',
                'value': 213,
                'members': []
            },
            {
                'name': 'pc4',
                'value': 132,
                'members': []
            },
        ]
    },
]
现在,如果您知道您的数据结构只有1层深,您可以像这样迭代它

for topmember in mydata:
    print "%s = %s"%(topmember['name'], topmember['value'])
    for member in topmember['members']:
        print '   MEMBER: %s = %s' % (member['name'], member['value'])
输出:

Windows = 12%
   MEMBER: pc1 = 123
   MEMBER: pc2 = 321
Linux = 11%
   MEMBER: pc3 = 213
   MEMBER: pc4 = 132
Windows = 12%
    pc1 = 123
    pc2 = 321
Linux = 11%
    pc3 = 213
    pc4 = 132
但如果您不知道它有多深,例如,成员可以进一步拥有更多的成员,而这些成员又有更多的成员等等,那么您可以递归地遍历它,例如

def print_recursive(members, indent=''):
    for member in members:
        print "%s%s = %s"%(indent, member['name'], member['value'])
        print_recursive(member['members'], indent + '    ')

print_recursive(mydata)
输出:

Windows = 12%
   MEMBER: pc1 = 123
   MEMBER: pc2 = 321
Linux = 11%
   MEMBER: pc3 = 213
   MEMBER: pc4 = 132
Windows = 12%
    pc1 = 123
    pc2 = 321
Linux = 11%
    pc3 = 213
    pc4 = 132

还要考虑到lambda增强的defaultdict的功能
这将生成一个三维网格,准备用项目列表填充:

>>> from collections import defaultdict
>>> data = defaultdict(lambda:defaultdict(lambda:defaultdict(list)))
>>> data['1stD']['2ndD']['3thrD'].append('mivalue')
>>> print data['1stD']['2ndD']['3thrD']
['mivalue']
>>> print data['1stD']['2ndD']['unknown']
[]

还要考虑到lambda增强的defaultdict的功能
这将生成一个三维网格,准备用项目列表填充:

>>> from collections import defaultdict
>>> data = defaultdict(lambda:defaultdict(lambda:defaultdict(list)))
>>> data['1stD']['2ndD']['3thrD'].append('mivalue')
>>> print data['1stD']['2ndD']['3thrD']
['mivalue']
>>> print data['1stD']['2ndD']['unknown']
[]