Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.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 - Fatal编程技术网

展平嵌套数组,同时在python中附加来自另一个数组的信息

展平嵌套数组,同时在python中附加来自另一个数组的信息,python,Python,嗨,我目前正在做机器学习,这里有一些复杂的事情给我。这是一个字典,其中包含“数据”和“名称”数组,子数组的数量相同,这意味着它们通过相同的数组级别和位置相互链接。例如,data[-12.7462492598983、-40.618078412505398、-53.765980530841738、5.2261728305123398、0.1216257841442624、-5.7948531230422988、-449155.505249317、0.91963697398417421]的总名称为10

嗨,我目前正在做机器学习,这里有一些复杂的事情给我。这是一个字典,其中包含“数据”和“名称”数组,子数组的数量相同,这意味着它们通过相同的数组级别和位置相互链接。例如,data
[-12.7462492598983、-40.618078412505398、-53.765980530841738、5.2261728305123398、0.1216257841442624、-5.7948531230422988、-449155.505249317、0.91963697398417421]的总名称为100,而数组中的数据-12.7462492598983的名称为“100.0”。
,某些名称可以表示单个级别数组或嵌套数组

{'data': [[ [-12.746249259898983, -40.618078412505398, -53.765980530841738, 5.2261728305123398, 0.12162578441442624, -5.7948531230422988, -449155.5052490317, 0.91963697398417421], [-98.037517854387147, -221.057540054155, -159.4518899022695, 2.8761226353857214, -5.3555144738112865, -8.4617336886131636, -1078807.4268864163, -13.13441127151575], [20.903581634463947, 25.329222910065528, 5.412150882014295, 9.8334972052776468, 5.0344964646349721, -4.9321628192214595, 465839.20729012048, 13.101100255062818], [6906900.092440652, 41574768.75710336, 10927415.550909607, 11310.66577299293, 8798.704300502737, 8799.682832152064, 183845205120901.88, 112667.8001209582], [23668.070022021395, 50044.215525581945, 31776.017910004855, 1187.8286828919734, 1004.3222306303834, 1097.6394464618995, 144191707.36233276, 3204.3354707366584]], [[-12.746249259898983, -40.618078412505398, -53.765980530841738, 5.2261728305123398, 0.12162578441442624, -5.7948531230422988, -449155.5052490317, 0.91963697398417421], [-98.037517854387147, -221.057540054155, -159.4518899022695, 2.8761226353857214, -5.3555144738112865, -8.4617336886131636, -1078807.4268864163, -13.13441127151575], [20.903581634463947, 25.329222910065528, 5.412150882014295, 9.8334972052776468, 5.0344964646349721, -4.9321628192214595, 465839.20729012048, 13.101100255062818], [6906900.092440652, 41574768.75710336, 10927415.550909607, 11310.66577299293, 8798.704300502737, 8799.682832152064, 183845205120901.88, 112667.8001209582], [23668.070022021395, 50044.215525581945, 31776.017910004855, 1187.8286828919734, 1004.3222306303834, 1097.6394464618995, 144191707.36233276, 3204.3354707366584]], [[105488.30345760827], [3289.7903599842557], [1084894.676814588], [14144.972809638024], [-0.28007907692942713, 0.22442925752465423, 0.53764244860950272], [-0.17191558990475442, -0.79049974125170352, 0.50351854155808451], [0.82458612961411526, 0.76972732632638607, 0.85167351947413183], [1.0, 1.0, 1.0]], [[523.30228588437444, 45.819830845333598, 28.816263055785519, -13.399823220658771, -4.3270838526008539, 6.3733684200628371, 8595795.3597348519, 8.384858849273007], [475.31250457055427, -228.32291772427124, -176.40773800372068, -18.093080976490384, -10.369967809128632, 4.2210565912106244, 7098802.0557304611, -7.1771997695309269], [588.25628456928746, 294.97718389914189, 262.91102656456047, -10.427939493412241, 1.4416568032097778, 8.5693307123828362, 10382020.11504475, 25.39147629554094], [48743197.97266989, 30241091.100284778, 18077525.93554477, 34815.577041886056, 13488.38255077284, 9285.35861896049, 1.33034499502354e+16, 137928.77372005512], [88438.08631445921, 56149.17419161105, 43172.45645293931, 2264.570124291333, 1314.3600405678308, 1119.5488398712207, 1452689415.79519, 3947.582767320521]], [[523.30228588437444, 45.819830845333598, 28.816263055785519, -13.399823220658771, -4.3270838526008539, 6.3733684200628371, 8595795.3597348519, 8.384858849273007], [475.31250457055427, -228.32291772427124, -176.40773800372068, -18.093080976490384, -10.369967809128632, 4.2210565912106244, 7098802.0557304611, -7.1771997695309269], [588.25628456928746, 294.97718389914189, 262.91102656456047, -10.427939493412241, 1.4416568032097778, 8.5693307123828362, 10382020.11504475, 25.39147629554094], [48743197.97266989, 30241091.100284778, 18077525.93554477, 34815.577041886056, 13488.38255077284, 9285.35861896049, 1.33034499502354e+16, 137928.77372005512], [88438.08631445921, 56149.17419161105, 43172.45645293931, 2264.570124291333, 1314.3600405678308, 1119.5488398712207, 1452689415.79519, 3947.582767320521]], [[187759.71695900976], [4698.479004730381], [1027854.7076158928], [23680.601277936279], [-0.15439507445075032, -0.075920544072209092, 0.66503179584326411], [0.46923791478750121, -0.69581655384848085, -0.72748336248359702], [0.21092970277607359, 0.14987815855097059, 0.81570800991816339], [1.0, 1.0, 1.0]], [[13.396472405737706, -18.359344127602043, 36.826432688017405, -5.4414333610698273, -10.694878175101108, 7.9448139442889429, 10816437.307411144, 0.19533722684887966], [-15.189934136155252, -200.13563785186551, -109.36104765476506, -11.7199280963678, -17.858474582674631, 6.8660269597012578, 1044415.9081568928, -1.3455015074983672], [72.972793023164726, 181.79005098185144, 199.11746464797852, -4.9326473220315465, -5.0927085243861612, 14.603766227834551, 19440694.34613679, 1.7339256547371409], [1384309.4521168934, 8347935.341004645, 7917333.307240587, 29378.49283018787, 32011.489849631027, 36975.920226450995, 3.3465760911327116e+16, 911.4959262418305], [11296.673361701862, 32414.28539427253, 29892.827418169887, 1857.859505569651, 2026.9222424051377, 2193.920509546758, 1961706423.8618736, 309.5250420877879]], [[13.396472405737706, -18.359344127602043, 36.826432688017405, -5.4414333610698273, -10.694878175101108, 7.9448139442889429, 10816437.307411144, 0.19533722684887966], [-15.189934136155252, -200.13563785186551, -109.36104765476506, -11.7199280963678, -17.858474582674631, 6.8660269597012578, 1044415.9081568928, -1.3455015074983672], [72.972793023164726, 181.79005098185144, 199.11746464797852, -4.9326473220315465, -5.0927085243861612, 14.603766227834551, 19440694.34613679, 1.7339256547371409], [1384309.4521168934, 8347935.341004645, 7917333.307240587, 29378.49283018787, 32011.489849631027, 36975.920226450995, 3.3465760911327116e+16, 911.4959262418305], [11296.673361701862, 32414.28539427253, 29892.827418169887, 1857.859505569651, 2026.9222424051377, 2193.920509546758, 1961706423.8618736, 309.5250420877879]], [[73603.78617414428], [6078.7022575215515], [625733.61247557076], [45672.991571875093], [0.043448760802826739, 0.23278517949941815, -0.4412484230587122], [0.73571039835259899, -0.97150579562327632, -0.85102560336644162], [0.43273760788012128, 0.59834831245116515, 0.76048753082083709], [1.0, 1.0, 1.0]], [[-4312.4566991228266, 111.37588860973005, -369.27441630396561, 1.0221741887428542, 10.264001072191407, -0.64794873494824146, -26535.315429097467, 3733.3894352435532], [-4391.6993203248185, 2.1930377207860374, -556.18155858830767, -2.8465168776531042, 6.8275893393989735, -2.992456229023948, -134301.2497497506, 3085.6901898537008], [-4265.6954381966243, 490.57527638444799, -106.53884094262287, 2.6903234802233951, 14.899879413776139, 1.2542987455939745, 124282.28583445404, 4312.3584935051322], [3154842424.3400664, 66787778.51899314, 37678234.97132428, 1886.122427403741, 27432.6986991385, 1552.4163983149103, 9721961586366.314, 2438338620.274526], [728805.1821517571, 88155.59598567848, 68098.54374026474, 500.1103528606394, 1980.9257474491533, 442.23338752473614, 30550976.541662402, 630942.8145561604]], [[-4312.4566991228266, 111.37588860973005, -369.27441630396561, 1.0221741887428542, 10.264001072191407, -0.64794873494824146, -26535.315429097467, 3733.3894352435532], [-4391.6993203248185, 2.1930377207860374, -556.18155858830767, -2.8465168776531042, 6.8275893393989735, -2.992456229023948, -134301.2497497506, 3085.6901898537008], [-4265.6954381966243, 490.57527638444799, -106.53884094262287, 2.6903234802233951, 14.899879413776139, 1.2542987455939745, 124282.28583445404, 4312.3584935051322], [3154842424.3400664, 66787778.51899314, 37678234.97132428, 1886.122427403741, 27432.6986991385, 1552.4163983149103, 9721961586366.314, 2438338620.274526], [728805.1821517571, 88155.59598567848, 68098.54374026474, 500.1103528606394, 1980.9257474491533, 442.23338752473614, 30550976.541662402, 630942.8145561604]], [[885059.3218777011], [2923.2694878345296], [2236604.1192022543], [8808.54792655048], [-0.67448622916323409, -0.50158101433414648, 0.59882229555795874], [-0.78104865531713752, -0.76429278912704701, 0.63516453144318363], [0.20462205303333128, 0.84578383059323625, 0.59233056719450861], [1.0, 1.0, 1.0]], [[-259.72665899990471, -83.479321394167755, -121.15460261636761, -9.5566399167895906, -10.751374026150252, 6.9216241967193373, 14885579.317280933, -21.445028515600601], [-443.23038559240399, -180.2214836399863, -177.88859043152414, -17.157662401019614, -16.084610849457864, 2.4976391930266151, 10238968.298370993, -44.428320700622876], [-303.57098842656001, 48.893029546726382, -69.225922326687694, -3.4513266189454357, -7.9243380822281777, 11.288531677853044, 19912765.253164865, 2.6916854500962191], [41735450.1518125, 24390799.584619, 9017310.78529916, 28630.03604412623, 27367.43896473854, 17107.884579392492, 4.242364584898001e+16, 253955.56763607], [75924.07800808054, 43290.42097424058, 29303.03439665969, 1778.5410136020398, 1988.7244606604343, 1372.5600617945775, 2515662904.620479, 4776.4285037481795]], [[-259.72665899990471, -83.479321394167755, -121.15460261636761, -9.5566399167895906, -10.751374026150252, 6.9216241967193373, 14885579.317280933, -21.445028515600601], [-443.23038559240399, -180.2214836399863, -177.88859043152414, -17.157662401019614, -16.084610849457864, 2.4976391930266151, 10238968.298370993, -44.428320700622876], [-303.57098842656001, 48.893029546726382, -69.225922326687694, -3.4513266189454357, -7.9243380822281777, 11.288531677853044, 19912765.253164865, 2.6916854500962191], [41735450.1518125, 24390799.584619, 9017310.78529916, 28630.03604412623, 27367.43896473854, 17107.884579392492, 4.242364584898001e+16, 253955.56763607], [75924.07800808054, 43290.42097424058, 29303.03439665969, 1778.5410136020398, 1988.7244606604343, 1372.5600617945775, 2515662904.620479, 4776.4285037481795]], [[148517.53337898097], [5139.82553605705], [1242960.9144121602], [27678.070645658128], [-0.072211399963483205, -0.01330100771527422, 0.50872724028242133], [0.12899184324668519, -0.83705081189441499, -0.30244329509440016], [0.8127044117719453, 0.76986342841470423, 0.67385354549078191], [1.0, 1.0, 1.0]]],
 'name': [[100, 101, 102, 103, 104, 105], [106, 107, 108], [109, 110, 111, 112, 113, 114, 115, 116], [200, 201, 202, 203, 204, 205], [206, 207, 208], [209, 210, 211, 212, 213, 214, 215, 216], [300, 301, 302, 303, 304, 305], [306, 307, 308], [309, 310, 311, 312, 313, 314, 315, 316], [400, 401, 402, 403, 404, 405], [406, 407, 408], [409, 410, 411, 412, 413, 414, 415, 416], [500, 501, 502, 503, 504, 505], [506, 507, 508], [509, 510, 511, 512, 513, 514, 515, 516]]}
现在我想将数据展平,并将它们全部放在底层,但是,一旦我这样做,名称就会不匹配

更一般地说(请注意,数据本身可能会得到更多嵌套级别,但地址不会),如果我得到:
{'data':[[1]、[2,3[4]]、[5,6]、[7,8,9]]、'name':[[100101]、[202203]}
其中
100是[1]的名称,101是[2,3[4]],202是[5,6]的名称,203是[7,8,9]的名称。

更清楚地说:

`{'data':[[ [1],[2,3,[4]] ],[ [5,6],[7,8,9]]]
             |      |           |      |
'name':  [[ 100,   101    ],[  202,   203  ]]
,一旦我展平数据并变成:
[1,2,3,4,5,6,7,8,9]
对应的名称数组仍然是[100101202203],这意味着不匹配,我希望它们匹配,因此当我展平嵌套数组时,我可以得到内部元素的相同名称,如get
[1,2,3,4,5,6,7,8,9]
[100.0101.0101.1101.2101.2202.0202.1203.0203.1203.2]
由于
[2,3,[4]
都命名为
101
,100.0表示数组中的第一个元素,即2101.2表示数组中的第三个元素,(不关心进一步的嵌套表示[4]仍然是101.2,但不是101.20,以及[[4]]也是101.2,但不是101.200,当然,如果你是一个魔术师,我希望我能有这个很酷的名字风格,但我认为它足够复杂,足以回答一个问题),因此,名字数组也得到了正确的扁平化

这是一种头脑风暴谢谢你的帮助


###我已经重写了这个问题,上一天我在@schlezzz15的帮助下在我的原始数据中发现了一些bug,真的非常感谢,shamly数据太大,很难在里面找到bug,真的很抱歉这可以工作。我还没有测试它

from compiler.ast import flatten

def main():
    dict_ = {'data': [1, [2, 3, [4]]], 'name': [1000, 1001]}
    data = dict_.get('data')
    name = dict_.get('name')
    flatten_dict = {}

    for i in xrange(len(data)):
        if isinstance(data[i], int):
            flatten_dict.update({data[i]: name[i]})
        elif isinstance(data[i], list):
            list_flatten = flatten(data[i])
            for item in list_flatten:
                flatten_dict.update({item: name[i]})

    print flatten_dict

main()
有趣的问题

使用、和compiler.ast.flatte的解决方案

from compiler.ast import flatten
from itertools import chain,cycle
d = {'data':[[ [1],[2,3,[4]] ],[ [5,6],[7,8,9]]],       
     'name':  [[ 100,   101    ],[  202,   203  ]]}

data,name = chain(*d["data"]),list(chain(*d["name"]))
data = [flatten(sublist)for sublist in data ]

print name
# >>> [100, 101, 202, 203]
print data
# >>> [[1], [2, 3, 4], [5, 6], [7, 8, 9]]

aligned = zip(name,data)
print aligned
# >>> [(100, [1]), (101, [2, 3, 4]), (202, [5, 6]), (203, [7, 8, 9])]

result = [zip(cycle([n]),da) for n,da in aligned]
print result
# >>> [[(100, 1)], [(101, 2), (101, 3), (101, 4)], [(202, 5), (202, 6)], [(203, 7), (203, 8), (203, 9)]]

flattened_result = list(chain(*result))
print flattened_result
# >>> [(100, 1), (101, 2), (101, 3), (101, 4), (202, 5), (202, 6), (203, 7), (203, 8), (203, 9)]


string_result = [str(item[0])+"."+str(item[1]-1) for item in flattened_result]
print string_result
# >>> ['100.0', '101.1', '101.2', '101.3', '202.4', '202.5', '203.6', '203.7', '203.8']


# I do not recommend the below version, only on OP's request.
d = {'data':[[ [1],[2,3,[4]] ],[ [5,6],[7,8,9]]],       
     'name':  [[ 100,   101    ],[  202,   203  ]]}
all_in_one =[str(item[0])+"."+str(item[1]-1) for item in chain(*[zip(cycle([n]),da) for n,da in zip((chain(*d["name"])),(flatten(sublist)for sublist in chain(*d["data"])))])]
print all_in_one == string_result
# >>> True

我不确定您想要哪种输出格式,因此我包含了所有中间结果。您应该很容易获得所需的输出。如果您指定了所需的输出,我将修改我的解决方案。

我已使用获得的原始数据进行了测试,元素都返回如下:11.73431016192542:[1060、1061、1062、1063、1064、1065、1066、1067、1070、1071、1072、1073、1074、1075、1076、1077、1080、1081、1082、1083、1084、1085、1086、1087]这很难说,我认为实现这一点的唯一方法是使用递归..哦,我想数字数组只是一个列表,而不是列表列表(等等)。此代码不起作用。我的错。谢谢!您编写的代码看起来非常“python”,我目前在火车上无法测试您的代码,但很快就会测试,您能否在一个目标中将数据和名称平铺到底层?例如,第一个打印(对齐打印上方的一个),数据将平铺到[1,2,3,4,5,6,7,8,9]名称将相应更改为[100.0101.0101.1101.2202.0202.1203.0203.1203.2]我可以单独做,但我想你可以提供更多的pythic方式来做这件事,我很想知道怎么做:谢谢!如果你问我是否能用一行来做,答案是肯定的,我可以。但是这并不意味着它会更“pythic”。我会认为这是一个巨大的混乱。你想把结果作为[ STR(name,index)]吗?你还想看吗?是的!