我想在Python中创建一个多维数组,以便稍后解析它。我是PHP的转换器,所以我对如何创建一个字典或列表或其他任何东西来解决这个问题。有人有想法吗?
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'
>> ...
答案 0 :(得分:5)
你可以创建一个递归列表或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
但如果你不知道它有多深,例如成员可以进一步拥有更多成员,其中有更多成员等,你可以递归地通过它,例如。
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%
pc1 = 123
pc2 = 321
Linux = 11%
pc3 = 213
pc4 = 132
答案 1 :(得分:0)
还要考虑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']
[]